gpt4 book ai didi

Python 比较两个不同长度的列表

转载 作者:行者123 更新时间:2023-11-30 22:33:20 35 4
gpt4 key购买 nike

您好,我想比较两个不同长度的列表,并打印一个排序表,其中包含每个表中缺少的项目。我部分能够完成此任务并打印 list_2 中缺少的值。但我无法打印 list_2 中 list_1 中缺少的值(字母“z”)。我怎样才能执行此操作以获得下面所需的输出?

list_1 = ['a', 'b', 'c', 'd', 'e', 'f']
list_2 = ['b', 'c', 'f', 'z']

table_format = '{:<10} {:<10}'
print(table_format.format('list_1', 'list_2'))
print('-' * 20)
for x in list_1:
for y in list_2:
if x in y:
print(table_format.format(x, y))
break
else:
print(table_format.format(x,'Missing'))

当前输出:

list_1     list_2    
--------------------
a Missing
b b
c c
d Missing
e Missing
f f

期望的输出:

list_1     list_2    
--------------------
a Missing
b b
c c
d Missing
e Missing
f f
Missing z

最佳答案

一种解决方案可能是使用第三个列表,其中包含两个原始列表的所有元素。然后我们可以对新列表进行排序,并在迭代它时,我们可以检查原始列表中第三个列表的元素是否存在。其实把第三个列表做成一套会更好。按照Patrick Haugh 的建议,我们应该在迭代之前将原始列表转换为集合。因此,该过程将更加高效。为什么?关注这个帖子。 Which is faster and why? Set or List?

list_1 = set(['a', 'b', 'c', 'd', 'e', 'f'])  # Or list_1 = {'a', 'b', 'c', 'd', 'e', 'f'}
list_2 = set(['b', 'c', 'f', 'z']) # list_2 = {'b', 'c', 'f', 'z'}

list_3 = set(list_1 | list_2)
table_format = '{:<10} {:<10}'
print(table_format.format('list_1', 'list_2'))
print('-' * 20)
for elem in sorted(list_3):
if elem in list_1:
if elem in list_2:
print(table_format.format(elem, elem))
else:
print(table_format.format(elem, 'Missing'))
else:
print(table_format.format('Missing', elem))

输出:

list_1     list_2    
--------------------
a Missing
b b
c c
d Missing
e Missing
f f
Missing z

关于Python 比较两个不同长度的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45180771/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com