一個例子:
list = [[2, 1, 2, 3, 4],
[0, 4, 5],
[1, 8, 9]]
因此,嵌套串列中的第一個索引決定將以下哪些數字放入非嵌套串列中。
[2, 1, 2, 3, 4] -> 2: so 1 and 2 gets picked up
[0, 4, 5] -> 0: no number gets picked up
[1, 8, 9] -> 1; number 8 gets picked up
輸出將是:
[1, 2, 8]
這是我到目前為止:
def nested_list(numbers):
if isinstance(numbers[0], list):
if numbers[0][0] > 0:
nested_list(numbers[0][1:numbers[0][0] 1])
else:
numbers = list(numbers[0])
return numbers nested_list(numbers[1:])
我嘗試通過遞回獲取串列,但出了點問題。我錯過了什么或者即使沒有遞回也可以做到這一點?
uj5u.com熱心網友回復:
您嘗試在此處使用帶元組解包的串列理解。
[val for idx, *rem in lst for val in rem[:idx]]
# [1, 2, 8]
注意此解決方案假定您始終擁有大小為 1 或更大的子串列。我們可以使用過濾掉空的子串列
filter(None, lst)
uj5u.com熱心網友回復:
list1=[[2, 1, 2, 3, 4],
[0, 4, 5],
[1, 8, 9]]
list2= []
for nested_list in list1:
for i in range(nested_list[0]):
list2.append(nested_list[i 1])
uj5u.com熱心網友回復:
您可以嘗試串列理解:
>>> [sub[i] for sub in lst for i in range(1, sub[0] 1) ]
[1, 2, 8]
PS:該解決方案期望每個子串列都是一個非空串列,否則會IndexError因sub[0].
uj5u.com熱心網友回復:
另一個串列理解
sum([x[1:x[0] 1] for x in arr], [])
# [1, 2, 8]
uj5u.com熱心網友回復:
使用內置函式map應用拾取函式,并使用itertools.chain扁平化結果串列:
def pick(l):
return l[1:1 l[0]]
ll = [[2, 1, 2, 3, 4], [0, 4, 5], [1, 8, 9]]
print( list(map(pick, ll)) )
# [[1, 2], [], [8]]
print( list(itertools.chain.from_iterable((map(pick, ll)))) )
# [1, 2, 8]
或者,使用串列理解:
ll = [[2, 1, 2, 3, 4], [0, 4, 5], [1, 8, 9]]
print( [x for l in ll for x in l[1:1 l[0]]] )
# [1, 2, 8]
兩個重要的注意事項:
我已經改名為您列出的名單
ll,而不是list。這是因為list已經是listpython 中內置類的名稱。隱藏內置函式的名稱非常危險,可能會產生意想不到的后果。我強烈建議您在命名自己的變數時不要使用內置函式的名稱。對于上述兩種解決方案,錯誤處理的行為相同:
IndexError如果一個子串列為空,則會引發例外(因為我們需要訪問第一個元素以了解要選擇的元素數量,因此如果沒有,則會引發錯誤第一個元素)。但是,如果其中一個子串列中沒有足夠的元素,則不會引發例外。例如,如果子串列之一是[12, 3, 4],那么上面的兩個解決方案都會默默地選擇兩個元素 3 和 4,即使他們被要求選擇 12 個元素,而不僅僅是 2 個。如果你想在這種情況下引發例外,您可以pick在第一個解決方案中修改功能:
def pick(l):
if len(l) == 0 or len(l) <= l[0]:
raise ValueError('in function pick: two few elements in sublist {}'.format(l))
return l[1:1 l[0]]
ll = [[2, 1, 2, 3, 4], [0, 4, 5], [1, 8, 9], [12, 3, 4]]
print( [x for l in ll for x in l[1:1 l[0]]] )
# [1, 2, 8, 3, 4]
print( [x for l in ll for x in pick(l)] )
# ValueError: in function pick: two few elements in sublist [12, 3, 4]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/342651.html
上一篇:制作計算器
