我有一个清单:
numbers = [12, 23, 26, 54]
我需要知道每对数字是否至少有1位数。例如,12
具有数字1
和2
,因此应该包括对(12,23),因为它们都具有数字2
。我想要返回对的列表。例如
>>> numbers = [12, 23, 26, 54]
>>> function(numbers)
[(12, 23), (12, 26), (23, 12), (23, 26), (26, 12), (26, 23)]
到目前为止,这是我的代码
pari_his=([12, 23, 26, 54])
par=set()
parus=[]
b=list()
c=list()
resitev=list()
for i in pari_his:
i=str(i)
for e,j in enumerate(i):
if e%2==0:
b.append(j)
else:
c.append(j)
print(b,c)
for ena, dva in zip(b, c):
kuku=(ena,dva)
parus.append(tuple(kuku))
print(parus)
for juj in parus:
print(juj[0],juj[1])
答案 0 :(得分:1)
使用itertools.product
获取元组(您必须两次过滤掉相同的数字),然后使用数字的set
个交叉点来查看它们是否有任何共同的数字。
import itertools
numbers = [12, 23, 26, 54]
[t for t in itertools.product(numbers, numbers) if set(str(t[0])) & set(str(t[1])) and t[0] != t[1]]
[(12, 23), (12, 26), (23, 12), (23, 26), (26, 12), (26, 23)]
没有itertools
你可以自己构建元组。
numbers = [12, 23, 26, 54]
[(i, j) for i in numbers for j in numbers if set(str(i)) & set(str(j)) and i != j]
[(12, 23), (12, 26), (23, 12), (23, 26), (26, 12), (26, 23)]