用Python方式获取列表列表并将元素从另一个列表“分发”到子列表的方法是什么?

时间:2019-03-21 03:57:09

标签: python list append

我一直在尝试学习Python不到两周。因此,对不起,如果我完全误会我。

我一直在搜索有关该问题的答案的语言,已经进行了大约五天的搜索,因此我很难清楚地表达措辞,因此,如果我错过了,请随时将其标记为重复并指出正确的方向

假设我有list1 = [[x, y], [a, b]]list2 = [0, 1]

我想要list3 = [[x, y, 0], [x, y, 1], [a, b, 0], [a, b, 1]]

在我对StackOverflow的研究中,我自己进行了实验,找到了获得各种类似结果的方法,例如:

[[x, y, 0], [a, b, 1]]

[[x, y, 0, 1], [a, b, 0, 1]]

[[x, y, 0, 1], [a, b]]

[[[x, y], 0], [[x, y], 1], [[a, b], 0], [[a, b], 1]]

我一直在考虑做的事情如下:

  1. 在list1中创建尽可能多的子列表迭代 list2中的元素 [[x, y], [a, b]] -> [[x, y], [x, y], [a, b], [a, b]]
  2. 平整list1,使其不再是子列表,而是重复 元素[[x, y], [x, y], [a, b], [a, b]] -> [x, y, x, y, a, b, a, b]
  3. 浏览list1的元素并插入的元素 扁平化列表[x, y, x, y, a, b, a, b] -> [x, y, 0, x, y, 1, a, b, 0, a, b, 1]上的list2
  4. 将元素分组为 合适的尺寸: [x, y, 0, x, y, 1, a, b, 0, a, b, 1] -> [[x, y, 0], [x, y, 1], [a, b, 0], [a, b, 1]]

如果这是我必须要做的,那就是我必须要做的,而我正在寻找一种可以做到这一点的方法,但是我觉得必须有某种更Python化的方式来执行此操作(那么,我又知道什么?),如果是这样,我正在努力寻找可能的结果。

3 个答案:

答案 0 :(得分:1)

从本质上讲,这只是两个列表的叉积。

>>> import itertools
>>> list(itertools.product(list1, list2))
[(['x', 'y'], 0), (['x', 'y'], 1), (['a', 'b'], 0), (['a', 'b'], 1)]

剩下要做的就是弄平每个元组。

>>> [x + [y] for x,y in itertools.product(list1, list2)]
[['x', 'y', 0], ['x', 'y', 1], ['a', 'b', 0], ['a', 'b', 1]]

答案 1 :(得分:0)

我可能是错的,但是我没有想到一个很棒的itertools解决方案

def permutations(a,b):
    for sublist in a:
        for value in b:
            yield sublist + [value]

list1 = [[x, y], [a, b]] 
list2 = [0, 1]
print(list(permutations(list1, list2)))

答案 2 :(得分:0)

仅使用列表理解:

list3 = [list[:] + [elem] for list in list1 for elem in list2]