【发布时间】:2022-12-21 11:57:28
【问题描述】:
我有一个清单:
list = [['X', 'Y'], 'A', 1, 2, 3]
我想分成:
new_list = [['X','A', 1, 2, 3] , ['Y', 'A', 1, 2, 3]]
这可能吗?
【问题讨论】:
我有一个清单:
list = [['X', 'Y'], 'A', 1, 2, 3]
我想分成:
new_list = [['X','A', 1, 2, 3] , ['Y', 'A', 1, 2, 3]]
这可能吗?
【问题讨论】:
我将建议一种使用可迭代解包的更简洁的方法——在我看来,它比使用列表切片更简洁。
我们获取 lst 的第一个元素并将其与列表的其余部分分开。然后,我们使用列表理解为 lst 的原始子列表中的每个元素创建一个新列表:
lst = [['X', 'Y'], 'A', 1, 2, 3]
fst, *rest = lst
[[elem, *rest] for elem in fst]
这输出:
[['X', 'A', 1, 2, 3], ['Y', 'A', 1, 2, 3]]
【讨论】:
[[elem, *rest] for elem, *rest in lst]
当然,去掉第一个元素来创建一个外层循环,然后遍历列表的其余部分来构建子列表:
lst = [['X', 'Y'], 'A', 1, 2, 3]
new_list = []
for item in lst[0]:
sub = [item]
for sub_item in lst[1:]:
sub.append(sub_item)
new_list.append(sub)
或者,作为一种理解:
new_list = [[item, *lst[1:]] for item in lst[0]]
*lst[1:] 会将切片解压到新创建的列表中。
借用命令式 for 循环的想法:
new_list = []
for item in lst[0]:
sub = [item, *lst[1:]]
new_list.append(sub)
【讨论】:
这可能不是最好的方法,但它有效
l = [['X', 'Y'], 'A', 1, 2, 3]
new_list = []
to_append = []
for item in l:
if isinstance(item, list):
new_list.append(item)
continue
to_append.append(item)
new_list.append(to_append)
print(new_list)
【讨论】:
是的,下面的代码返回的正是您想要的。
list = [['X', 'Y'], 'A', 1, 2, 3]
new_list = []
for i, item in enumerate(list[0]):
new_list.append([item] + list[1:])
print(new_list)
【讨论】: