Скрытые строки внутри цикла для цикла в список

assertcarl спросил: 13 июня 2018 в 12:08 в: python

Я пытаюсь создать список, содержащий все строки, найденные внутри двойных кавычек, до сих пор я дошел до этого.

matches = ['8 "app/Http/Controllers/Controller.php" line 1', '9 "app/Http/Controllers/PostController.php" line 1']if len(matches) > 1:
    for match in matches:
        matches = re.findall(r'\"(.+?)\"', match)
        print(matches[0])

Он выводит это

app/Http/Controllers/Controller.php
app/Http/Controllers/PostController.php

Я хочу превратить эти строки в список, чтобы он выглядел следующим образом:

['app/Http/Controllers/Controller.php','app/Http/Controllers/PostController.php']

Он также должен быть динамическим, поскольку внутри двойных кавычек может быть более двух строк.

Как это можно сделать?

2 ответа

Есть решение
blhsing ответил: 13 июня 2018 в 12:14

Вы можете заменить оператор print на append на список, который вы инициализировали до цикла.

import re
matches = ['8 "app/Http/Controllers/Controller.php" line 1', '9 "app/Http/Controllers/PostController.php" line 1']output = []
if len(matches) > 1:
    for match in matches:
        matches = re.findall(r'\"(.+?)\"', match)
        output.append(matches[0])print(output)

Это выводит:

['app/Http/Controllers/Controller.php', 'app/Http/Controllers/PostController.php']
assertcarl ответил: 13 июня 2018 в 12:25
Вот и все :) спасибо большое.
The Matt ответил: 13 июня 2018 в 12:29

Вы можете использовать понимание списка, чтобы сгенерировать список более кратко.

В python, понимание списка позволяет форматировать `[x for x in (1,4,3,2)].

Итак, это приведет к этому коду.

import re
matches = ['8 "app/Http/Controllers/Controller.php" line 1', '9 "app/Http/Controllers/PostController.php" line 1']results = [re.findall(r'\"(.+?)\"', match)[0] for match in matches]

Переменная результатов будет:

['app/Http/Controllers/Controller.php', 'app/Http/Controllers/PostController.php']

assertcarl ответил: 14 июня 2018 в 09:46
Спасибо за альтернативный способ достижения этого, я согласен, что это намного лучший способ сделать это.