Python – 从列表中提取相似对
有时,在使用Python列表时,我们可能会遇到需要提取列表中所有元素对的问题。这类问题可以应用在 Web 开发和日常编程等领域。让我们讨论可以执行此任务的某些方式。
Input : test_list = [1, 2, 3, 4]
Output : []
Input : test_list = [2, 2, 2, 2, 3, 3, 4]
Output : [(2, 2), (2, 2), (3, 3)]
方法 #1:使用Counter()
+ 列表推导
上述功能的组合可以用来解决这个问题。在此,使用 Counter() 提取频率,并使用列表理解完成对构造。
# Python3 code to demonstrate working of
# Extract Similar pairs from List
# Using Counter() + list comprehension
from collections import Counter
# initializing list
test_list = [4, 6, 7, 4, 2, 6, 2, 8]
# printing original list
print("The original list is : " + str(test_list))
# Extract Similar pairs from List
# Using Counter() + list comprehension
res = [(key, key) for key, val in Counter(test_list).items()
for _ in range(val // 2)]
# printing result
print("The records after pairing : " + str(res))
输出 :
The original list is : [4, 6, 7, 4, 2, 6, 2, 8]
The records after pairing : [(4, 4), (6, 6), (2, 2)]
方法 #2:使用fromkeys()
+ 列表推导
这是可以执行此任务的另一种方式。在此,我们使用字典的 fromkeys() 和 get() 执行 Counter() 的任务,即获取频率。
# Python3 code to demonstrate working of
# Extract Similar pairs from List
# Using fromkeys() + list comprehension
# initializing list
test_list = [4, 6, 7, 4, 2, 6, 2, 8]
# printing original list
print("The original list is : " + str(test_list))
# Extract Similar pairs from List
# Using fromkeys() + list comprehension
temp = dict.fromkeys(test_list, 0)
for key in test_list:
temp[key] += 1
res = [(key, key) for key, val in temp.items() for _ in range(val // 2)]
# printing result
print("The records after pairing : " + str(res))
输出 :
The original list is : [4, 6, 7, 4, 2, 6, 2, 8]
The records after pairing : [(4, 4), (6, 6), (2, 2)]