我试图弄清楚如何获取整数列表列表并创建一个包含列表列表组合的新列表。我希望组合从第一个列表中的值开始,然后分别从每个后续列表中取1,只有当值大于上一个列表时才会使用。
l=[[1,2,3],[4,8],[5,10]]
# the answer would look like this
correct=[[1,4,5],[1,4,10],[1,8,10],[2,4,5],[2,4,10],[2,8,10],[3,4,5],[3,4,10],[3,8,10]]
答案 0 :(得分:2)
列表理解可能是一个很好的方法。由于你的约束,它很好地工作。你可能想要这样的东西:
[[i,j,k] for i in l[0] for j in l[1] if j>i for k in l[2] if k>j]
>>> [[1, 4, 5],
[1, 4, 10],
[1, 8, 10],
[2, 4, 5],
[2, 4, 10],
[2, 8, 10],
[3, 4, 5],
[3, 4, 10],
[3, 8, 10]]
如果j> i和l [2]中的所有k,则为l [1]中的所有j的l [0]中的所有i的形式[i,j,k]的列表列表[2] ]如果k> j(因为我们已经知道j> i)
但是,上面的代码仅适用于长度为3的列表的输入列表。稍微了解一下,但这种递归方法适用于任何长度的输入列表
def list_of_lists(in_list):
full_list=[]
def recurse(so_far, l):
if l==len(in_list):
return so_far
next_list = in_list[l]
for i in next_list:
if i>so_far[-1]:
new_list = recurse(so_far.copy()+[i], l+1)
if new_list:
full_list.append(new_list)
for i in in_list[0]:
recurse([i],1)
return full_list
答案 1 :(得分:1)
>>> from itertools import product
...
...
... def combos(lst):
... result = []
... for p in product(*lst):
... if all(a < b for a, b in zip(p, p[1:])):
... result.append(list(p))
... return result
...
>>> lst = [[1, 2, 3], [4, 8], [5, 10]]
>>> correct = [[1, 4, 5], [1, 4, 10], [1, 8, 10], [2, 4, 5], [2, 4, 10],
... [2, 8, 10], [3, 4, 5], [3, 4, 10], [3, 8, 10]]
>>> combos(lst) == correct
True
答案 2 :(得分:0)
val bytes = ip"192.168.1.15"