簡體   English   中英

如何使用嵌套循環打印嵌套列表?

[英]How to print nested lists using nested loops?

嗨,我有我的問題的簡化示例。

我想得到一個輸出

1
a
b
2
c
3
d
e
f
4
g
5
h

我嘗試了不同的變體,但可以弄清楚邏輯。 我的代碼如下。 感謝您的幫助。 我正在嘗試不使用numpy或panda。 我正在使用python3.4

num = ["1" , "2" ,"3" , "4" , "5" ]
let = [["a","b"],["c"],["d","e","f"],["g"],["h"]]


for x in num :
    print(x)
    for y in let :
        print(y)

zipBoth = zip(num,let)


for x,y in zipBoth :
    print(x)
    print(y)

請注意,您正在嘗試打印兩個列表的內容。 這是時間上的線性運算。 兩個循環不會消除它-時間復雜度是二次方。 此外,第二個解決方案不會使y變平。


使用yieldyield from定義一個輔助函數。

def foo(l1, l2):
    for x, y in zip(l1, l2):
        yield x
        yield from y        

for i in foo(num, let):
     print(i)

1
a
b
2
c
3
d
e
f
4
g
5
h

如果您想要一個列表,只需調用foo及其周圍的list包裝即可:

print(list(foo(num, let)))
['1', 'a', 'b', '2', 'c', '3', 'd', 'e', 'f', '4', 'g', '5', 'h']

請注意, yield from從python3.3起可以使用。

只需zip列表並使用itertools.chain展平兩次

num = ["1" , "2" ,"3" , "4" , "5" ]
let = [["a","b"],["c"],["d","e","f"],["g"],["h"]]

import itertools

result = list(itertools.chain.from_iterable(itertools.chain.from_iterable(zip(num,let))))

現在result產量:

['1', 'a', 'b', '2', 'c', '3', 'd', 'e', 'f', '4', 'g', '5', 'h']

您可以使用以下命令進行打印:

print(*result,sep="\n")
numlet = [c for n, l in zip(num,let) for c in [n] + l]
for c in numlet:
    print(c)

拼合名單let使用pydash pydash是一個實用程序庫。

打印串聯列表中的每個元素( num + pydash.flatten(let)

>>> import pydash as pyd
>>> num = ["1" , "2" ,"3" , "4" , "5" ]
>>> let = [["a","b"],["c"],["d","e","f"],["g"],["h"]]
>>> for i in [str(j) for j in num + pyd.flatten(let)]:
...     print(i)
1
2
3
4
5
a
b
c
d
e
f
g
h
>>> 

此解決方案假定“ num”和“ let”具有相同數量的元素

num = ["1" , "2" ,"3" , "4" , "5" ]
let = [["a","b"],["c"],["d","e","f"],["g"],["h"]]

for i in range(len(num)):
    print num[i]
    print '\n'.join(let[i])

暫無
暫無

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

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