[英]How to create a unique list of lists from a list of list of lists without "flattening"
编辑问题
我有一个内部嵌套列表,如下所示。
test_list = [
[['1']],
[['2', '2']],
[['3', '3'], ['4', '4'], ['5', '5'], ['6', '6']],
[['7', '7'], ['8'], ['7'], ['1'], ['7', '7']],
[['7', '7'], ['8'], ['7'], ['7', '7']],
[['2', '2']]]
我不打算按每个人的意思来压平这个列表。 我宁愿要达到两个结果。
1)返回一个列表,该列表丢弃具有单个项目的索引的外部列表,但保留具有分组项目的索引的嵌套列表。 IE
预期清单 output:
new_list = [
['1'],
['2', '2'],
[['3', '3'], ['4', '4'], ['5', '5'], ['6', '6']],
[['7', '7'], ['8'], ['7'], ['1'], ['7', '7']],
[['7', '7'], ['8'], ['7'], ['7', '7']],
['2', '2']]
打印时看起来像:
['1']
['2', '2']
[['3', '3'], ['4', '4'], ['5', '5'], ['6', '6']]
[['7', '7'], ['8'], ['7'], ['1'], ['7', '7']]
[['7', '7'], ['8'], ['7'], ['7', '7']]
['2', '2']
2) 返回一个新的唯一列表,它看起来像下面表达的 new_list 变量。
new_list = [
['1'],
['2'],
['3', '4', '5', '6'],
['7', '8', '7', '1', '7'],
['7', '8', '7', '7'],
['2']]
即新列表中的每个项目打印为:
['1']
['2']
['3', '4', '5', '6']
['7', '8', '7', '1', '7']
['7', '8', '7', '7']
['2']
谢谢。 PS:很抱歉总的重新编辑,我完全歪曲了预期的结果。
您可以在列表理解中对子列表长度使用简单测试:
out = [l[0] if len(l)==1 else l for l in test_list]
output:
[['1'],
['2', '2'],
[['3', '3'], ['4', '4'], ['5', '5'], ['6', '6']],
[['7', '7'], ['8'], ['7'], ['1'], ['7', '7']],
[['7', '7'], ['8'], ['7'], ['7', '7']],
['2', '2']]
如果你真的想print
:
for l in test_list:
print(l[0] if len(l)==1 else l)
['1']
['2', '2']
[['3', '3'], ['4', '4'], ['5', '5'], ['6', '6']]
[['7', '7'], ['8'], ['7'], ['1'], ['7', '7']]
[['7', '7'], ['8'], ['7'], ['7', '7']]
['2', '2']
你需要一个嵌套列表理解:
[[x[0] for x in l] for l in test_list]
Output:
[['1'],
['2'],
['3', '4', '5', '6'],
['7', '8', '7', '1', '7'],
['7', '8', '7', '7'],
['2']]
如果您难以理解列表理解,尤其是嵌套列表理解,您可以使用通常的 for 循环和 if 条件分解它。
new_list = []
for each_index in test_list:
if len(each_index) == 1:
new_list.append(each_index[0])
else:
new_list.append(each_index)
print(new_list)
嵌套列表理解的第二个答案转化为:
new_list = []
for each_index in test_list:
test = []
for each_item in each_index:
test.append(each_item[0])
new_list.append(test)
print(new_list)
注意: @mozway 给出的列表理解答案更简洁,但是当我想正确理解列表理解的流程时,一个好的做法是像这样分解它,这样我就避免了只是复制和粘贴,但留下了更好的理解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.