_你好世界!我有從多個串列中洗掉元素的問題。我有一個多重串列。
print("Preparation")
print(dateTableMonthValues)
它列印我:
[['4:10'], ['3:20'], ['3:45'], ['32:05'], ['5:00'], ['5:00'], ['5:00'], ['5:00'], ['5:00'], ['5:00'], ['5:00'], ['35:00'], ['3:45'], ['5:00'], ['5:00'], ['2:30'], ['2:30'], ['3:45'], ['6:15'], ['28:45'], ['5:00'], ['5:00'], ['7:55'], ['7:05'], ['5:00'], ['5:50'], [], ['35:50']]
從這個陣列中我需要洗掉幾個元素,例如 ['32:05'], ['35:00'], ['28:45'], [], ['35:50']]
好的,我找到了這些值,并且:
for i in range(len(dateTableDayValues)):
week = dateTableDayValues[i][0]
print(dateTableDayValues[i][0])
if week[3] == 'w':
print('w')
dateTableMonthValues[i].pop(0)
print("Check")
print(dateTableMonthValues)
現在它列印我:
[['4:10'], ['3:20'], ['3:45'], [], ['5:00'], ['5:00'], ['5:00'], ['5:00'], ['5:00'], ['5:00'], ['5:00'], [], ['3:45'], ['5:00'], ['5:00'], ['2:30'], ['2:30'], ['3:45'], ['6:15'], [], ['5:00'], ['5:00'], ['7:55'], ['7:05'], ['5:00'], ['5:50'], [], []]
所以,我有兩個問題。首先,為什么方法'pop'沒有洗掉元素,因為我仍然有這樣的元素:'[]'。其次,如何從陣列(串列)中洗掉這些空元素“[]”以定義所有元素的總和?它不作業:
if dateTableMonthValues[i][0] == []:
del dateTableMonthValues[i][0]
dateTableMonthValues[i].pop(0)
老問題:所以,當我嘗試訪問 list[3][0] 時,它寫給我“串列索引超出范圍”。所以我決定洗掉該元素。
但無論如何,我無法定義所有元素的總和。我仍然繼續收到訊息
IndexError: list index out of range
請幫助我,我該如何解決這個問題?
uj5u.com熱心網友回復:
有很多方法可以處理它!
編輯:(問題稍作修改)
- 為什么方法'pop'沒有洗掉元素?因為您訪問元素“i”并洗掉了他的第一個元素。如果你想洗掉它,你可以這樣做:
dateTableMonthValues.pop(i) # Not: dateTableMonthValues[i].pop(0)
或者
dateTableMonthValues.remove(the_element)
- 如果要洗掉串列的每個 [ ],可以執行以下操作:
lst = [['4:10'], ['3:20'], ['3:45'], [], ['5:00'], ['5:00'], ['5:00'], ['5:00'], ['5:00'], ['5:00'], ['5:00'], [], ['3:45'], ['5:00'], ['5:00'], ['2:30'], ['2:30'], ['3:45'], ['6:15'], [], ['5:00'], ['5:00'], ['7:55'], ['7:05'], ['5:00'], ['5:50'], [], [],[],[],[]]
i = 0
while i<len(lst):
if lst[i] == []:
lst.pop(i)
else:
i =1
print(lst) #[['4:10'], ['3:20'], ['3:45'], ['5:00'], ['5:00'], ['5:00'], ['5:00'], ['5:00'], ['5:00'], ['5:00'], ['3:45'], ['5:00'], ['5:00'], ['2:30'], ['2:30'], ['3:45'], ['6:15'], ['5:00'], ['5:00'], ['7:55'], ['7:05'], ['5:00'], ['5:50']]
列舉
l = [['4:10'], ['3:20'], ['3:45'], ['Delete me'], ['5:00'], ['Delete me'], ['10:00']]
for i,e in enumerate(l):
if e == ["Delete me"]:
l.pop(i)
print(l) #[['4:10'], ['3:20'], ['3:45'], ['5:00'], ['10:00']]
但如果你真的不知道如何使用enumerate:
嘗試/排除
l = [['4:10'], ['3:20'], ['3:45'], ['Delete me'], ['5:00'], ['Delete me'], ['10:00']]
for i in range(len(l)):
try:
if l[i] == ["Delete me"]:
l.pop(i)
except IndexError:
pass
print(l) #[['4:10'], ['3:20'], ['3:45'], ['5:00'], ['10:00']]
為了簡單起見:當出現“IndexError”時,程式就像pass什么都沒發生一樣。(實際上,從系統的角度來看,它更復雜,但您可以這樣解釋!)
消除
l = [['4:10'], ['3:20'], ['3:45'], ['Delete me'], ['5:00'], ['Delete me'], ['10:00']]
for e in l:
if e == ["Delete me"]:
l.remove(e)
print(l) #[['4:10'], ['3:20'], ['3:45'], ['5:00'], ['10:00']]
最后但并非最不重要的!list.remove(element) 從串列中洗掉元素,而不是通過索引洗掉元素pop
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/463891.html
