簡體   English   中英

如何打印內部列表包含字符串和字符串列表的列表列表?

[英]How do I print a list of lists where the inner lists contain both strings and lists of strings?

例如,

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']

您可以使用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

使用遞歸函數處理任何深度的子列表,但在每個子列表可選后打印換行符,並且只在第一次調用時啟用它。

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 

首先,您需要遍歷第一個內層,然后展平其中的元素。

然后使用連接功能按順序打印。 詳情如下。

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

仍然是python的新手,但不能用簡單的字符串連接和列表元素來解決這個問題?

一些東西

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

print(str(list1[0]) + '\n' + str(list1[1]) + '\n' + str(list1[2]))

輸出正是op要求的?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM