繁体   English   中英

如何在不“展平”的情况下从列表列表创建唯一的列表列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM