给出一个列表以生成元组,例如:
lst = ['d', '112', 'b', 'c', 'i', 'a', 'e']
输出:
[('d','112'), ('d','b'), ('d','c'), ('d','i'), ..., ('a','e')]
谢谢。
答案 0 :(得分:1)
尝试
import itertools
lst = ['d', '112', 'b', 'c', 'i', 'a', 'e']
for comb in itertools.combinations(lst, 2):
print(comb)
答案 1 :(得分:0)
如果想使代码易于阅读,嵌套循环是最经典的解决方案。
results = []
for i in range(len(lst)):
for j in range(i + 1, len(lst)):
results.append((lst[i], lst[j]))
如果要使其更具Python风格,您应该知道如何使用zip
函数。
results = []
for i in range(len(lst)):
results += list(zip([lst[i]] * (len(lst) - i - 1), lst[i + 1:]))
如果您想疯了,要保存行号,请尝试使用递归lambda函数。
f = lambda x: [] if len(x) <= 1 else list(zip([x[0]] * (len(x) - 1), x[1:])) + f(x[1:])
然后f(lst)
是您想要的。
无论如何,请记住,无论代码多么短,时间复杂度都保持不变。如果您真的不需要超级短代码,则使用简单的代码可以更好地进行长期维护。