如何打印内部列表同时包含字符串和字符串列表的列表?

2024-06-28 18:48:36 发布

您现在位置:Python中文网/ 问答频道 /正文

例如

list1 = [ ['str1', 'str2', 'str3'],
          [['str4', 'str5'], 'str6', 'str7', 'str8'],
          ['str9', 'str10']]

我希望list1输出如下:

str1 str2 str3
str4 str5 str6 str7 str8
str9 str10

这样,属于第一层内部列表的每个内部列表都在各自的行上。你知道吗

在上面的示例中,我将下面描述的部分称为第一层的内部列表:

['str1', 'str2', 'str3'] 

但是在下面的部分中,我会说str4和str5在属于第二层的内部列表中。换句话说,它们属于内部列表的内部列表。你知道吗

[['str4', 'str5'], 'str6', 'str7', 'str8']

Tags: 示例列表行上我会list1str1str2str3
3条回答

您可以使用itertools.chain来实现:

list1 = [['str1', 'str2', 'str3'],
        [['str4', 'str5'], 'str6', 'str7', 'str8'],
        ['str9', 'str10']]

from itertools import chain

def listy(x):
    return x if isinstance(x, list) else [x]

for sublist in list1:
    print(' '.join(chain.from_iterable(map(listy, sublist))))

str1 str2 str3
str4 str5 str6 str7 str8
str9 str10

首先,你需要在第一个内层循环,然后把里面的元素展平。你知道吗

然后用join函数按顺序打印。详情如下。你知道吗

list1 = [ ['str1', 'str2', 'str3'],
        [['str4', 'str5'], 'str6', 'str7', 'str8'],
        ['str9', 'str10']]

def flatten(lst):
    if lst==[]:
        return lst
    else:
        if isinstance(list[0], list):
            return flatten(lst[0])+flatten(lst[1:])
        else:
            return [lst[0],]+flatten(lst[1:])

def print_it(lst_rino):
    for lst in lst_rino:
        new_lst=flatten(lst)
        print(" ".join(new_lst))

print_it(list1)

The Output:

str1 str2 str3
str4 str5 str6 str7 str8
str9 str10

使用递归函数来处理子列表的任何深度,但是在每个子列表之后打印换行符是可选的,并且只在第一次调用时启用它。你知道吗

list1 = [ ['str1', 'str2', 'str3'],
        [['str4', 'str5'], 'str6', 'str7', 'str8'],
        ['str9', 'str10']]
def p(l, newline=True):
    output = ''
    for i in l:
        if isinstance(i, str):
            output += i + ' '
        else:
            p(i, False)
            if newline:
                print()
    print(output, end='')
p(list1)

这将输出:

str1 str2 str3 
str4 str5 str6 str7 str8 
str9 str10 

相关问题 更多 >