比较 2 个相同大小的元组列表:比较和交换

Posted

技术标签:

【中文标题】比较 2 个相同大小的元组列表:比较和交换【英文标题】:Compare 2 lists of tuples with same size,:compare and swap 【发布时间】:2021-01-25 23:26:07 【问题描述】:

制作了 2 个元组列表: 我想使用字母表和计数器来比较两个列表。 su 的元组,属于列表 tu 中元组的索引。 -> tu 上的元组 0 有 (40, 'b', 1) -> 'b', 1 在 su 的元组 4 中是相同的,因此 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 , '一', 1)] 为了比较,我填写了两个列表,索引。 [(8, b), (17, 'c'), (1, 'b'), (4, 'a'), (30, 'a')]

【问题讨论】:

【参考方案1】:

这行得通:

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 可以构造为字典理解:

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

【讨论】:

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

以上是关于比较 2 个相同大小的元组列表:比较和交换的主要内容,如果未能解决你的问题,请参考以下文章

如何比较和搜索列表中的元素与列表 SML 中的元组

Python:元组列表:比较所有元组并检索元组的元素不等于任何其他元组的元组

MAC地址比较大小?

Python - 验证列表中的元组具有相同的长度

Python编程的若干个经典小技巧

冒泡排序算法你真的会了吗