1

我有一个包含三个单独列表的列表:

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”,如果您查看“Ben”列表,会将“Toddy Gurley II”更改为“Todd Gurley”。我目前的尝试是这样的:

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

4 回答 4

2

您可以使用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']
于 2018-09-23T03:46:49.707 回答
1

我们可以在这里结合枚举列表理解[-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']]
于 2018-09-23T04:16:32.883 回答
1

在您的外部 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']
于 2018-09-23T03:53:48.657 回答
1

当你打电话时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])
于 2018-09-23T03:54:49.557 回答