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

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 中運行它來驗證它。

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

TA貢獻1803條經驗 獲得超6個贊
編寫一個遞歸函數來為你做這件事:
def print_my_list(lst):
for elem in lst:
if type(elem) is list:
print_my_list(elem)
else:
print(elem)
一件好事是,這將適用于相互嵌套的任意數量的列表,將它們全部“展平”。
添加回答
舉報