我有一個函式,我想遍歷串列串列。問題是,這個串列串列是動態的,這意味著它會根據用戶輸入而變化。
這是我的代碼示例:
result = func(5)
for z in Z[0]:
result = func(z)
其中 Z 是串列的動態串列, func 是我的函式。該函式應該迭代串列子集串列 Z[0] 中的每個元素并對結果求和。當串列串列如下所示時,代碼會起作用:
Z = [[1.1],[2.1],[3.1],[4.1]]
Z[0] 只是 [1.1]。然而有時這個動態串列串列在每個串列中有更多元素,在這種情況下我需要迭代每個元素。像下面這樣:
Z = [list([1.1, 1.3]),list([3.1]),list([4]])
在這種情況下:
Z[0] = [list([1.1, 1.3])]
我的代碼應該執行以下操作:
result = func(5)
for z in Z[0]:
result = func(z)
....
func(1.1) func(1.3)
當我嘗試使用串列串列運行代碼時,出現錯誤:“只能將串列(不是“浮動”)連接到串列”
我確定它與嘗試迭代串列有關。如果有人對此有一個簡單的解決方法,或者知道我很想知道的問題。
uj5u.com熱心網友回復:
很難理解您的問題,但是如果您只是想對主串列中的每個 num 串列求和,那么您可以執行以下操作
def sum_nums(nums: list):
return [sum(num) for num in nums]
nums = [
[1, 2],
[7, 9, 10],
[2],
[9]
]
print(sum_nums(nums))
輸出
[3, 26, 2, 9]
uj5u.com熱心網友回復:
如果 的每個元素Z都是一個串列,只是具有不同的大小(即[1.1], 或[1.1, 2.2]等)您可以遍歷串列并且串列的大小無關緊要。
for l in Z:
result = 0
for z in l:
result = func(z)
# do something with inner list result
對于 Z 中的每個串列,[1.1]是一個串列,然后對于 Z 中串列中的每個元素,如果高于 then 1.1,則對該值運行 func 然后添加到結果。
如果 Z 可以是不是串列的元素串列(即Z = [1.1, 2.2]),則此方法將不起作用,但您尚未證明這是您的情況。
編輯 - 在結果中添加到串列以單獨獲取內部串列的總和
uj5u.com熱心網友回復:
您的輸入是:
Z = [[1.1, 1.3],[2.1],[3.1],[4.1]]
我認為您需要做的是迭代所有元素,應用您的函式并添加結果并回傳
def sum_of_all_elements(list_of_list):
result = 0
for nested_list in list_of_list:
for element in nested_list:
result = func(element)
return result
print(sum_of_all_elements(Z))
使用線條理解
result = sum([ func(element) for element in nested_list for nested_list in Z])
uj5u.com熱心網友回復:
你的邏輯看起來是正確的。我在您提供的以下代碼的兩個示例上對其進行了測驗,并產生了正確的結果。
def func(x):
return x**2
Z1 = [[1.1],[2.1],[3.1],[4.1]] # works
Z2 = [list([1.1, 1.3]), list([3.1]), list([4])] # works
result1 = func(5)
for z in Z1[0]:
result1 = func(z)
print(result1)
## Result is 26.21
# (5**2) (1.1**2) = 25 1.21 = 26.21
result2 = func(5)
for z in Z2[0]:
result2 = func(z)
print(result2)
## Result is 26.21
# (5**2) (1.1**2) (1.3**2) = 25 1.21 1.69 = 27.9
但是,我相信當輸入陣列 Z 的嵌套串列層數超出預期時,就會出現您的問題。在下面的示例中,值“1”被格式化為一個單獨的串列。當代碼迭代 1.1 和 1.3 時,它可以處理這兩種情況,因為它們是浮點數。一旦代碼到達格式化為串列 [1] 的第三個元素,它會“感到驚訝”并且不知道如何處理串列,因為它期待一個浮點數。該代碼的設計目的不是為了期待這個新的額外串列層。
Z3 = [list([1.1, 1.3, [1]]), list([3.1]), list([4])] # does not work
result3 = func(5)
for z in Z3[0]:
result3 = func(z) ## Error occurs on this line
print(result3)
為避免此問題,您可以確保用戶不會輸入比您的代碼預期更多的嵌套串列。或者,您可以使用 numpy 陣列或 Pandas 資料幀,而不是使用嵌套串列,并添加新維度而不是嵌套串列的新級別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/370110.html
