Python 3.x 比较两个大小相同的元组列表:比较和交换

Python 3.x 比较两个大小相同的元组列表:比较和交换,python-3.x,tuples,compare-and-swap,Python 3.x,Tuples,Compare And Swap,创建2个元组列表: 我想用字母表和计数器来比较两个列表。su的元组,属于列表tu中元组的索引。->tu中的元组0有(40,'b',1)->su中的元组4中的'b',1是相同的,因此 su的元组4应该转到索引0,usw su = [(30, 'a', 1), (1, 'b', 0), (4, 'a', 0), (17, 'c', 0), (8, 'b', 1)] tu = [(40, 'b', 1), (9, 'c', 0), (3, 'b', 0), (11, 'a', 0), (12, 'a'

创建2个元组列表: 我想用字母表和计数器来比较两个列表。su的元组,属于列表tu中元组的索引。->tu中的元组0有(40,'b',1)->su中的元组4中的'b',1是相同的,因此 su的元组4应该转到索引0,usw

su = [(30, 'a', 1), (1, 'b', 0), (4, 'a', 0), (17, 'c', 0), (8, 'b', 1)]
tu = [(40, 'b', 1), (9, 'c', 0), (3, 'b', 0), (11, 'a', 0), (12, 'a', 1)]

for i, (s, t) in enumerate(zip(su, tu)):
             if t[1] == 'H':
                print(f" 'H' {i}")
我的最终通缉名单su_new=[(8,b,1),(17,'c',0),(1,'b',0),(4,'a',0),(30,'a',1)] 为了比较,我填写了两个列表,索引。 [(8,b),(17,'c'),(1,'b'),(4,'a'),(30,'a')]

这项工作:

from copy import copy
su = [(30, 'a', 1), (1, 'b', 0), (4, 'a', 0), (17, 'c', 0), (8, 'b', 1)]
tu = [(40, 'b', 1), (9, 'c', 0), (3, 'b', 0), (11, 'a', 0), (12, 'a', 1)]

index_dic = {}
for i, tup in enumerate(tu):
    index_dic[tup[1:]] = i

new_su = copy(su)
for tup in su:
    new_index = index_dic[tup[1:]]
    new_su[new_index] = tup

print(new_su)
#[(8, 'b', 1), (17, 'c', 0), (1, 'b', 0), (4, 'a', 0), (30, 'a', 1)]
或者,索引可以构造为字典理解:

index_dic = {tup[1:]:i for i, tup in enumerate(tu)}

你的索引切片+字典方法很有趣,非常有用!对我来说是新的。@pythonabsir不客气。我考虑在第二个for循环中使用list.index()方法来检索新索引,而不是使用字典。但是,这会将时间复杂度增加到O(n^2)。目前的方法是O(n)。如果没有更好的答案,请记住接受。