У меня есть список, где есть строки, я хочу удалить [] - PullRequest
0 голосов
/ 09 ноября 2019

Python-программа, где у меня есть список слов из панд:

a = [['how to get  my bill'], ['Where can I locate my  student records'], ['Where can I locate my  GPA'], ['how do I find  my bill'], ['How do I find my  student records']]

b =[["'GPA', 'G P A', 'G.P.A'"], ["'academic standing'"], ["'my bill', 'bill'"], ["'student records'"], ["'time sheet', 'timesheet'"]] 

ожидаемый результат: ['how to get my bill','how to get bill','Where can I locate my student records','Where can I locate my GPA', 'Where can I locate my G.P.A','Where can I locate my G P A','how do I find my bill','How do I find my student records']

a = [['how to get  my bill'], ['Where can I locate my  student records'], ['Where can I locate my  GPA'], ['how do I find  my bill'], ['How do I find my  student records'], ['where can I find  my bill'], ['where can I locate  my bill'], ['where do I find  GPA'], ['I want my  student records'], ['Where do I find my  academic standing'], ['Where do I find my  student records'], ['where do I I find my  GPA']]
b = [['GPA', 'G P A', 'G.P.A'], ['academic standing'], ['my bill', 'bill'], ['student records'], ['time sheet', 'timesheet']]
output = []
for i in a:
    for word in i.split():
        if word in b:
            output += [i.replace(word, other) for other in b if other != word]
q = output
print(output)

1 Ответ

0 голосов
/ 09 ноября 2019

Проблема в вашем коде в том, что b - это список списков, вам нужно проверить слова в каждом из подсписков в b, поэтому вам необходим второй цикл через b. Если содержимое b действительно такое, как вы показали, для каждой строки в списке списков необходимо удалить внутренние кавычки и разбить их на отдельные строки, поэтому я добавил b = [x[0].replace("'", "").split(',') for x in b] для этого.

Он не совсем соответствует требуемому выводу, так как у вас есть if other != word, поэтому он не воспроизводит ничего, соответствующего исходному слову. Вы можете просто удалить if, если вы этого хотите.

Ваш код, как написано, также не будет обрабатывать фразы из нескольких слов из-за использования .split(). Например, он найдет «счет» и заменит его на «мой счет», но вам нужна совершенно другая логика для поиска комбинаций слов.

a = [['how to get  my bill'], ['Where can I locate my  student records'], ['Where can I locate my  GPA'], ['how do I find  my bill'], ['How do I find my  student records'], ['where can I find  my bill'], ['where can I locate  my bill'], ['where do I find  GPA'], ['I want my  student records'], ['Where do I find my  academic standing'], ['Where do I find my  student records'], ['where do I I find my  GPA']]
b =[["'GPA', 'G P A', 'G.P.A'"], ["'academic standing'"], ["'my bill', 'bill'"], ["'student records'"], ["'time sheet', 'timesheet'"]] 
b = [x[0].replace("'", "").split(',') for x in b]
output = []
for i in a:
    for word in i[0].split():
        for replacements in b:
            if word in replacements:
                 output += [i[0].replace(word, other) for other in replacements if other != word]
q = output
print(output)

Вывод:

['how to get  my my bill', 'Where can I locate my  G P A', 'Where can I locate my  G.P.A', 'how do I find  my my bill', 'where can I find  my my bill', 'where can I locate  my my bill', 'where do I find  G P A', 'where do I find  G.P.A', 'where do I I find my  G P A', 'where do I I find my  G.P.A']

Если вы перевернете логический цикл (циклически перебирая записи в каждом подсписке в b для каждого подсписка в a), вы станете намного ближе к тому, что хотите (по крайней мере, сначала).

a = [['how to get  my bill'], ['Where can I locate my  student records'], ['Where can I locate my  GPA'], ['how do I find  my bill'], ['How do I find my  student records'], ['where can I find  my bill'], ['where can I locate  my bill'], ['where do I find  GPA'], ['I want my  student records'], ['Where do I find my  academic standing'], ['Where do I find my  student records'], ['where do I I find my  GPA']]
b =[["'GPA', 'G P A', 'G.P.A'"], ["'academic standing'"], ["'my bill', 'bill'"], ["'student records'"], ["'time sheet', 'timesheet'"]] 
b = [x[0].replace("'", "").split(',') for x in b]
output = []
for i in a:
    for replacements in b:
        for j in replacements:
            if j in i[0]:
                output += [i[0].replace(j, other) for other in replacements]
                break
q = output
print(output)

Вывод:

['how to get  my bill', 'how to get  bill', 'Where can I locate my  student records', 'Where can I locate my  GPA', 'Where can I locate my  G P A', 'Where can I locate my  G.P.A', 'how do I find  my bill', 'how do I find  bill', 'How do I find my  student records', 'where can I find  my bill', 'where can I find  bill', 'where can I locate  my bill', 'where can I locate  bill', 'where do I find  GPA', 'where do I find  G P A', 'where do I find  G.P.A', 'I want my  student records', 'Where do I find my  academic standing', 'Where do I find my  student records', 'where do I I find my  GPA', 'where do I I find my  G P A', 'where do I I find my  G.P.A']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...