我正在使用python 3
我有一个不同元组的列表。每个元组的第一个值总是相同,但其余的变化。如何在包含第一个值的元组之后搜索列表,然后将整个元组替换为列表中的新元组?
例如:
这是我的元组:(122, 23, 24, 9)
这个元组在列表中,第一个值总是相同但其余的变化 如何在列表中找到第一个值等于我的元组“122”的元组并将其替换为我的整个元组
(125, 34, 35, 21)
(122, 341, 5, 27)
(124, 31, 51, 7)
答案 0 :(得分:8)
l = [(125, 34, 35, 21), (122, 341, 5, 27), (124, 31, 51, 7)]
t = (122, 23, 24, 9)
out = [t if e[0] == t[0] else e for e in l]
print(out)
打印出来:
[(125, 34, 35, 21), (122, 23, 24, 9), (124, 31, 51, 7)]
答案 1 :(得分:0)
假设您的列表为l
且您的元组为t
,并且您总是只有一个要替换的元组:
l[l.index([_ for _ in l if _[0] == t[0]][0])] = t
不太好,我承认。
如果列表中有多个元组具有匹配的第一个值,则只会替换第一个元组。
答案 2 :(得分:0)
a = [(125, 34, 35, 21), (122, 341, 5, 27), (124, 31, 51, 7)]
t = (122, 23, 24, 9)
for i, v in enumerate(a):
if v[0] == t[0]:
a[i] = t
break
然而,改变你正在迭代的列表的值有不同的含义,但是因为你认为没有问题后你就打破了!请注意,break意味着您只在列表中查找一个可能的元组,如果列表包含数百万个条目,如果您的值位于列表的早期,则不会循环遍历所有值,以获得更好的性能。
编辑:
添加了替换元组t
答案 3 :(得分:0)
您可以使用index
方法或循环遍历列表来搜索列表中的元素。例如,index
方法:
mylist = [(125, 34, 35, 21),
(122, 341, 5, 27),
(124, 31, 51, 7)]
idx = mylist.index((122, 341, 5, 27))
# idx should be '1'
问题是,只有在找到整个元组时才会找到条目。所以这可能不是最好的解决方案。
使用循环可能如下所示:
for idx, itm in enumerate(mylist):
if itm[0] == 122:
mylist[idx] = (1,2,3,4,5) # your new tuple
我正在使用enumerate
为列表中的每个元素添加索引。