通过它的第一个条目替换列表中的元组

时间:2012-02-28 09:14:35

标签: python list replace tuples equals

我正在使用python 3

我有一个不同元组的列表。每个元组的第一个值总是相同,但其余的变化。如何在包含第一个值的元组之后搜索列表,然后将整个元组替换为列表中的新元组? 例如: 这是我的元组:(122, 23, 24, 9)

这个元组在列表中,第一个值总是相同但其余的变化 如何在列表中找到第一个值等于我的元组“122”的元组并将其替换为我的整个元组

(125, 34, 35, 21)

(122, 341, 5, 27)

(124, 31, 51, 7)

4 个答案:

答案 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为列表中的每个元素添加索引。