sentence = [[1,0,3],[2,0,0],[0,0,5]]
empty = []
for element in sentence :
for icelement in element :
if not icelement == 0:
empty.append(icelement)
print(empty)
print(empty[2]) #this should give 3 or empty[8] should give 5
我做了很多嘗試,但仍然有問題。我知道這是因為python自動更新元素索引但不知道如何控制它。任何建議都會幫助我。
num = [1,0,4,5]
print(num[3]) #gives 5
for n in num :
if n == 0:
num.remove(n)
print(num[3])# doesnt exist.
uj5u.com熱心網友回復:
您想在洗掉某些元素的同時保留原始扁平串列中的位置嗎?
選項要么展平串列,要么保留零;只是忽略它們。
empty = [item for sublist in sentence for item in sublist] #[1, 0, 3, 2, 0, 0, 0, 0, 5]
print(empty[2]) # returns 3
或者用字典做點什么,使用扁平串列中的原始位置作為鍵。
count = 0
empty = {}
for element in sentence :
for icelement in element :
if not icelement == 0:
empty[count] = icelement
count =1
print(empty[2]) # returns 3
uj5u.com熱心網友回復:
python的索引從0開始
它會回傳串列:
[1, 3, 2, 5]
所以要獲得第二個元素,我們應該這樣做:
print(empty[1])
所以代碼現在看起來像這樣
sentence = [[1,0,3],[2,0,0],[0,0,5]]
empty = []
for element in sentence :
for icelement in element :
if not icelement == 0:
empty.append(icelement)
print(empty)
print(empty[1])
輸出:
[1, 3, 2, 5]
3
uj5u.com熱心網友回復:
從您的代碼和輸出描述來看,您似乎想要展平嵌套串列并洗掉零。同時您希望保留原始的扁平索引。
這對于串列是不可能的,因為索引必須從0到len(the_list)。
您可以保留零:
sentence = [[1,0,3],[2,0,0],[0,0,5]]
empty = [i for l in sentence for i in l]
# [1, 0, 3, 2, 0, 0, 0, 0, 5]
或者使用不同的容器。字典可以使用任意鍵:
from itertools import chain
empty = {i:v for i,v in
enumerate(chain.from_iterable(sentence))
if v}
# {0: 1, 2: 3, 3: 2, 8: 5}
empty[2]
# 3
empty[8]
# 5
uj5u.com熱心網友回復:
您可以在一行中撰寫相同的回圈,它會給出與您的代碼相同的結果。
sentence = [[1,0,3],[2,0,0],[0,0,5]]
empty= [icelement for element in sentence for icelement in element if icelement != 0]
print(empty)
輸出:
[1,3,2,5]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/396273.html
上一篇:我真想和偷賣原始碼的人打一架
