首页 > 解决方案 > 如何做这个清单

问题描述

假设我从列表开始:

list1 = [['a', '1', '2'], ['b', '1'], ['c'], ['d']]

和元组:

b = (1, 2, 3, 4)

现在我想得到一个像这样的列表:

c = [['a', '1', '2'], ['b', '1', '1'], ['b', '1', '2'], ['b', '1', '3'], ['b', '1', '4'], ['c'], ['d']]

所以每个部分都b扩展了旧嵌套列表的新副本b

所以基本上我想要的是这样的:

c = [i + [j] for j in b if "b" in i else i for i in a]            (1)

可悲的是,这不起作用。

所以我尝试了:

c = [[i + [j] for j in b] if "b" in i else i for i in a]

这给了我:

[['a', '1', '2'], [['b', '1', 1], ['b', '1', 2], ['b', '1', 3], ['b', '1', 4]], ['c'], ['d']]

然后我试图再次拆分它,但我没有管理它。

我最好的尝试是:

[i[x] if type(i[0]) is list else i for i in c for x in range(len(i))]

有没有办法让(1)正常工作或让我得到我想要的结果的列表?我有点卡住了。可能这很容易,但我看不到方法。

标签: pythonpython-3.xlistlist-comprehension

解决方案


我会避免对这种复杂的东西进行列表推导:

list1 = [['a', '1', '2'], ['b', '1'], ['c'], ['d']]

b = (1, 2, 3, 4)

new_list = []
for i in list1:
    if 'b' in i:
        extended = [i + [str(j)] for j in b]
        new_list += extended
    else:
        new_list.append(i)

推荐阅读