亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遍歷列表列表和單個元素

遍歷列表列表和單個元素

慕雪6442864 2023-06-20 14:41:53
給定以下列表,a = [[1,2,3],1,[1,2,43,5],[1,23,4,4],6.5,[1,1,2,45]]我想了解它的所有要素。如您所見,當子集只有一個元素時,我沒有 1 的列表,只有元素。所以當然這是行不通的,因為的第二個元素a是不可迭代的,for x in a:    for i in x:        print(i)        #do much more錯誤:   for i in x:TypeError: 'int' object is not iterable我可以執行以下操作,但我發現它很不方便,因為我必須復制代碼,或者調用部分中的函數'#do much more。任何想法?for x in a:    if type(x) is list:        for i in x:            print(i)            #do much more    else:        print(x)        #do much more (the same as above)
查看完整描述

4 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

一種不需要類型檢查并避免重復自己的“pythonic”方法是使用所謂的 EAFP??“請求寬恕比請求許可更容易”)編碼風格。

以下是如何將其應用于此場景:

a = [[1,2,3],1,[1,2,43,5],[1,23,4,4],6.5,[1,1,2,45]]


for x in a:

? ? try:

? ? ? ? it = iter(x)

? ? except TypeError:

? ? ? ? it = [x]

? ? for i in it:

? ? ? ? print(i)

? ? ? ? #do much more


查看完整回答
反對 回復 2023-06-20
?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

問題是你有一個集合,其中每個元素可以是一個集合或單個元素。如果您想避免扁平化,并且@green-cloak-guy 的扁平化輸出不適合您的使用,您可以在使用之前整理數據,以便您可以將其作為有保證的列表列表使用。


a = [[1,2,3],1,[1,2,43,5],[1,23,4,4],6.5,[1,1,2,45]]


for x in a:

    if not isinstance(x, list):

        x = [x]

    for i in x:

        print(i)

        #do much more

說真的,我不懂 python,但這應該適合你。


ps說真的,我不懂python。你只需拿起東西,我在 REPL 中運行它來驗證它。


查看完整回答
反對 回復 2023-06-20
?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

您可以通過定義返回生成器的函數將附加邏輯移出循環:


def flatten(items):

    for item in items:

        if isinstance(item, list):

            yield from flatten(item)

        else:

            yield item


a = [[1,2,3],1,[1,2,43,5],[1,23,4,4],6.5,[1,1,2,45]]


for i in flatten(a):

    print(i)

    # Your logic here!

您可以驗證上面代碼的輸出:


1

2

3

1

1

2

43

5

1

23

4

4

6.5

1

1

2

45


查看完整回答
反對 回復 2023-06-20
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

編寫一個遞歸函數來為你做這件事:


def print_my_list(lst):

    for elem in lst:

        if type(elem) is list:

            print_my_list(elem)

        else:

            print(elem)

一件好事是,這將適用于相互嵌套的任意數量的列表,將它們全部“展平”。


查看完整回答
反對 回復 2023-06-20
  • 4 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號