замена строки в списке списков python - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть список, содержащий три отдельных списка:

James =     ['Alvin Kamara','Alex Collins','Michael Thomas',
          'Adam Thielen','Evan Engram','Lamar Miller']

Ben =   ['Todd Gurley II','Royce Freeman','Larry Fitzgerald',
        'Cooper Kupp','Benjamin Watson','Robby Anderson']

Chris =     ['Dion Lewis','Rex Burkhead','Julio Jones',
          'Keenan Allen','Zach Ertz','Demaryius Thomas']

Я хочу удалить текст «II», который, если вы посмотрите в список «Бен», изменит «Toddy Gurley II» наТодд Герли.Моя текущая попытка такова:

master_list = [James,Ben,Chris]

for owner in master_list:
    owner = [word.replace(' II','') for word in owner]

print(master_list[1])

Но вывод, который я получаю:

['Todd Gurley II', 'Royce Freeman', 'Larry Fitzgerald', 'Cooper Kupp', 'Benjamin Watson', 'Robby Anderson']

Ответы [ 4 ]

0 голосов
/ 23 сентября 2018

Мы можем объединить перечислить и понимание списка здесь и оценить, используя [-2:] позицию наших строк

l = [James, Ben, Chris]

for idx, item in enumerate(l):
    l[idx] = [i[:-3] if 'II' in i[-2:] else i for i in item]
chrx@chrx:~/python/stackoverflow/9.22$ python3.7 uk.py
[['Alvin Kamara', 'Alex Collins', 'Michael Thomas', 'Adam Thielen', 'Evan 
Engram', 'Lamar Miller'], ['Todd Gurley', 'Royce
Freeman', 'Larry Fitzgerald', 'Cooper Kupp', 'Benjamin Watson', 'Robby
Anderson'], ['Dion Lewis', 'Rex Burkhead', 'Julio Jones', 'Keenan
Allen', 'Zach Ertz', 'Demaryius Thomas']]
0 голосов
/ 23 сентября 2018

Во внешнем цикле for вы обновляете копию переменной owner, но не заменяете ее в списке.Вместо этого вы можете добавить обновленную переменную owner в новый список:

new_list = []
for owner in master_list:
    owner = [word.replace(' II','') for word in owner]
    new_list.append(owner)

print(new_list[1])

['Todd Gurley', 'Royce Freeman', 'Larry Fitzgerald', 'Cooper Kupp', 'Benjamin Watson', 'Robby Anderson']

В качестве альтернативы, вы можете использовать enumerate() над списком владельцев, чтобы обновить оригинальную master_list на месте:

for i, owner in enumerate(master_list):
    owner = [word.replace(' II','') for word in owner]
    master_list[i] = owner

print(master_list[1])

['Todd Gurley', 'Royce Freeman', 'Larry Fitzgerald', 'Cooper Kupp', 'Benjamin Watson', 'Robby Anderson']
0 голосов
/ 23 сентября 2018

когда вы звоните owner = [word.replace(' II','') for word in owner], вы не обновляете master_list;Вы изменяете копию одного из его элементов.

Вы можете либо выполнить цикл и обновить master_list, сделав вызовы типа

master_list[1] = [word.replace(' II','') for word in owner]

Или вы можете сослаться на новый массив:

new_master_list = []
for owner in master_list:
    new_master_list.append([word.replace(' II', '') for word in owner])

print(new_master_list[1])
0 голосов
/ 23 сентября 2018

Вы можете использовать re:

import re
print([re.sub('\sII$', '', i) for i in master_list[1]])

Выход:

['Todd Gurley', 'Royce Freeman', 'Larry Fitzgerald', 'Cooper Kupp', 'Benjamin Watson', 'Robby Anderson']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...