【发布时间】:2019-08-21 08:50:19
【问题描述】:
假设我从列表开始:
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) 正常工作或让我得到我想要的结果的列表?我有点卡住了。可能这很容易,但我看不到路。
【问题讨论】:
-
与推导有关似乎有点复杂,因为您希望每次迭代添加多个项目,所以我猜您要么在之后展平列表,要么强制执行,使用 list.append()如果没有“b”或多个list.append(),如果有“b”。
标签: python python-3.x list list-comprehension