[英]python: IndexError: string index out of range
我從Google教程中學習python。 被困在與清單有關的練習中。 出現索引錯誤
lis[j]=words.pop()[i]
IndexError: string index out of range
我需要對列表進行排序,但是以x開頭的單詞應該是第一個。
代碼是
def front_x(words):
i=0
lis=[]
j=0
k=0
words.sort()
while i<len(words):
if words[i][0:1]=="x":
lis[j]=words.pop()[i]
j+=1
i+=1
lis.extend(words)
while k<len(lis):
print(lis[k])
k+=1
return
lis
是一個空列表, 任何索引都會引發異常。
如果要將元素添加到該列表,請改用lis.append()
。
請注意,您可以直接循環序列,而無需保留自己的計數器:
def front_x(words):
lis = []
words.sort()
for word in words:
if word.startswith("x"):
lis.append(word)
for entry in lis:
print(entry)
您可以通過立即打印以x
開頭的所有單詞來進一步減少這種情況,而無需構建單獨的列表:
def front_x(words):
for word in sorted(words):
if word.startswith("x"):
print(word)
如果要對列表進行排序,且所有x
單詞都在前,請使用自定義排序鍵:
def front_x(words):
return sorted(words, key=lambda w: (not w.startswith('x'), w))
首先按.startswith('x')
的布爾標志對.startswith('x')
進行.startswith('x')
; False
在True
之前排序,因此我們先否定該測試,然后否定單詞本身。
演示:
>>> words = ['foo', 'bar', 'xbaz', 'eggs', 'xspam', 'xham']
>>> sorted(words, key=lambda w: (not w.startswith('x'), w))
['xbaz', 'xham', 'xspam', 'bar', 'eggs', 'foo']
我需要對列表進行排序,但是以x開頭的單詞應該是第一個。
與@Martijn擴展答案中的自定義搜索鍵互補,您也可以嘗試使用此方法,它更接近於您的原始方法,並且可能更易於理解:
def front_x(words):
has_x, hasnt = [], []
for word in sorted(words):
if word.startswith('x'):
has_x.append(word)
else:
hasnt.append(word)
return has_x + hasnt
關於原始代碼出了什么問題,該行實際上存在三個問題
lis[j]=words.pop()[i]
lis[j]
僅在列表中已有第j
個元素時才有效,但是當您將項目添加到最初為空的列表中時,應改用lis.append(...)
。 i
處刪除以“ x”開頭的單詞,但是pop()
始終會刪除最后一個項目。 pop()
用於堆棧; 切勿在使用索引循環時從列表中刪除項目! [i]
運算符,即,您正在訪問單詞的第i
個字母,該字母可能短得多; 因此, IndexError
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.