我差不多完成了一个有人给我的任务,起初很容易使用itertools的product()函数。 然而,这个人要求它也应该做一些有点不同的事情:
li =
[[1,2,3],
[4,5,6]]
常规产品()会给出类似的东西:[1,4],[1,5],[1,6],[2,4],[2,5],[2,6],[ 3,4] ......
它应该做的是:
执行常规产品(),然后,添加列表中第一个元素的下一个项目,依此类推。一套完整的例子是:
[[1,4,2]
[1,4,3],
[1,5,2],
[1,5,3],
[2,4,3],
[2,5,3],
[2,6,3]]
在这种情况下我应该如何使用itertools?
编辑:
如果我解释该计划的目标可能会有所帮助: 例如,用户将输入5行乘6列的数字列表 普通产品()将产生5个数字组合。这个人想要一个6号组合。这个“第6”号码来自哪里?这可能来自他选择他想要的那一行。
答案 0 :(得分:1)
我想知道你表演的神奇计算是什么,但它看起来就像是你的公式:
k = int(raw_input('From What row items should be appeared again at the end?'))
res = [l for l in product(*(li+[li[k]])) if l[k]<l[len(li)] ]
答案 1 :(得分:1)
对两个以上子列表进行广义化(地图函数将是另一个替代)
from pprint import pprint
for li in ([[1, 2, 3],
[4, 5, 6]],
[[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]]
):
triples= []
prevlist=li[0]
for nextlist in li[1:]:
for spacing in range(1,len(prevlist)):
triples.extend([[first,other,second]
for first,second in zip(prevlist,prevlist[spacing:])
for other in nextlist])
pprint(sorted(triples))