您的程式碼嘗試將一個整數視為可迭代的物件,這是不可能的。itertools.chain(*lst)
會嘗試將lst
中的每個元素展開,但是整數無法被展開。如果您想要將一個巢狀列表平坦化,您可以嘗試以下的程式碼:
lst = [1, [1, 1]]
flat_lst = [item for sublist in lst for item in (sublist if isinstance(sublist, list) else [sublist])]
print(flat_lst)
這段程式碼會檢查lst
中的每個元素是否為列表。如果是,它會將該列表展開;如果不是,它會將該元素轉換為單元素列表,然後再進行展開。這樣,您就可以處理混合了整數和列表的列表了。希望這對您有所幫助!
对不起,我犯了一个错误。在这种情况下,numpy
的flatten
方法可能无法正常工作,因为它试图将一个非均匀的嵌套列表(即,列表中的元素既有整数又有列表)转化为一个numpy
数组。这可能会导致TypeError
。
你可以试试以下的方法,它使用了Python的内置函数itertools.chain
:
import numpy as np
import itertools
lst = [1, [1, 1]]
flat_lst = list(itertools.chain(*lst))
在这个例子中,flat_lst
将会是[1, 1, 1]
。这段代码会遍历lst
中的每个元素,如果元素是一个列表,就将其展开;如果不是,就将其作为一个元素添加到新的列表flat_lst
中。
希望这个答案对你有所帮助!如果你有其他问题或需要进一步的帮助,请随时告诉我。😊
当然,你可以使用numpy
库的flatten
方法来降维嵌套列表。这是一个例子:
import numpy as np
lst = [1, [1, 1]]
arr = np.array(lst, dtype=object)
flat_arr = np.concatenate(arr.flat)
在这个例子中,flat_arr
将会是array([1, 1, 1])
。np.array
函数将列表转化为numpy数组,然后flatten
方法将其降维。最后,np.concatenate
函数将得到的数组连接成一个一维数组。
希望这个答案对你有所帮助!如果你有其他问题或需要进一步的帮助,请随时告诉我。😊
当然,Python的内置函数itertools.chain
可以更简单地实现这个功能。这是一个例子:
import itertools
lst = [1, [1, 1]]
flat_lst = list(itertools.chain.from_iterable(itertools.repeat(x) if isinstance(x, int) else x for x in lst))
在这个例子中,flat_lst
将会是[1, 1, 1]
。itertools.chain.from_iterable
函数可以将输入的可迭代对象(在这个例子中是列表)连接成一个迭代器,然后我们用list
函数将其转化为列表。
希望这个答案对你有所帮助!如果你有其他问题或需要进一步的帮助,请随时告诉我。😊
你的输入是一个包含嵌套列表的列表。如果你想要将其降维(即,将嵌套的列表展平),你可以使用Python的列表推导式。这是一个例子:
lst = [1, [1, 1]]
flat_lst = [item for sublist in lst for item in (sublist if isinstance(sublist, list) else [sublist])]
在这个例子中,flat_lst
将会是[1, 1, 1]
。这段代码会遍历lst
中的每个元素,如果元素是一个列表,就将其展开;如果不是,就将其转化为一个只有一个元素的列表。这样,我们就可以将所有的元素放入一个新的列表flat_lst
中,实现降维。
希望这个答案对你有所帮助!如果你有其他问题或需要进一步的帮助,请随时告诉我。😊