【发布时间】:2018-06-26 02:58:29
【问题描述】:
给定一个生成元组的列表,例如:
lst = ['d', '112', 'b', 'c', 'i', 'a', 'e']
输出:
[('d','112'), ('d','b'), ('d','c'), ('d','i'), ..., ('a','e')]
谢谢。
【问题讨论】:
标签: python python-3.x
给定一个生成元组的列表,例如:
lst = ['d', '112', 'b', 'c', 'i', 'a', 'e']
输出:
[('d','112'), ('d','b'), ('d','c'), ('d','i'), ..., ('a','e')]
谢谢。
【问题讨论】:
标签: python python-3.x
如果您想让代码易于阅读,嵌套循环是最经典的解决方案。
results = []
for i in range(len(lst)):
for j in range(i + 1, len(lst)):
results.append((lst[i], lst[j]))
如果你想让它更pythonic,你应该知道如何使用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)就是你想要的。
无论如何,请记住,无论您的代码多短,时间复杂度都保持不变。如果您真的不需要超短代码,那么使用简单的代码会更好地进行长期维护。
【讨论】:
试试看
import itertools
lst = ['d', '112', 'b', 'c', 'i', 'a', 'e']
for comb in itertools.combinations(lst, 2):
print(comb)
【讨论】: