我有一个这样的列表
[['a', 'word'],
['University', 'org'],
['of', 'org'],
['Michigan', 'org'],
['Michigan', 'country']]
我想要做的是,如果我在第一次迭代中找到了密歇根这个词,我将返回标签,并将该词替换为类似于"deleted“的内容,当我再次迭代时,我应该找到这样的列表
[['a', 'word'],
['University', 'org'],
['of', 'org'],
['deleted', 'org'],
['Michigan', 'country']]
我尝试的是
for i in range(len(list)):
if word.lower()==list[i][0].lower():
found= list[i][1]
list.pop(i)
list[i][0] = "deletedword"
break
发布于 2018-05-28 18:04:39
使用生成器表达式查找第一个"Michigan"
的位置。将其替换为所需的单词:
lst = [['a', 'word'], ['University', 'org'], ['of', 'org'], ['Michigan', 'org'], ['Michigan', 'country']]
try:
pos = next((i, x.index('Michigan')) for i, x in enumerate(lst) if 'Michigan' in x)
lst[pos[0]][pos[1]] = 'deleted'
except StopIteration:
print('There is no Michigan in the list')
print(lst)
# [['a', 'word'],
# ['University', 'org'],
# ['of', 'org'],
# ['deleted', 'org'],
# ['Michigan', 'country']]
发布于 2018-05-28 18:05:03
您希望通过break
跳出嵌套的for
循环。实现此目的的一种可读方法是使用函数和return
语句:
def remove_first_el(A, k='Michigan'):
for i in range(len(A)): # iterate outer lists
for j in range(len(A[i])): # iterate inner lists
if A[i][j].casefold() == k.casefold(): # ignore case for comparison
A[i][j] = 'deleted'
return A
res = remove_first_el(lst)
print(res)
[['a', 'word'],
['University', 'org'],
['of', 'org'],
['deleted', 'org'],
['Michigan', 'country']]
如果您需要在子列表的第一个元素中添加"Michigan“,则可以相应地修改函数:
def remove_first_el_zero_pos(A, k='Michigan'):
for i in range(len(A)):
if A[i][0].casefold() == k.casefold():
A[i][0] = 'deleted'
return A
https://stackoverflow.com/questions/50563646
复制相似问题