gpt4 book ai didi

Python 索引错误处理

转载 作者:行者123 更新时间:2023-11-30 22:48:39 26 4
gpt4 key购买 nike

def kindDetector(list):
for i in range(0,len(list)):
if type(list[i]) != type('a'):
return 0
return 1

def findWords(list,i):
if i == 0:
return list[0]
if list[i] < findWords(list,i-1):
return list.pop(i)
else:
return list.pop(i-1)

def sortWords(list,i):
result=[]
while i >= 0:
result.append(findWords(list,i))
i -=1
print(result)


list = input('Enter your words, with a space between.\t').split()
i = len(list)-1
if kindDetector(list):
sortWords(list,i)

但在这里我只能输入 2 个单词,当我尝试使用 3 个单词时会发生这种情况:

Traceback (most recent call last):
File "C:/Users/honey/Desktop/python/selfMade/sortWords.py", line 26, in <module>
sortWords(list,i)
File "C:/Users/honey/Desktop/python/selfMade/sortWords.py", line 18, in sortWords
result.append(findWords(list,i))
File "C:/Users/honey/Desktop/python/selfMade/sortWords.py", line 10, in findWords
if list[i] < findWords(list,i-1):
IndexError: list index out of range

最佳答案

您将冒泡排序(即比较邻居并尝试一次移动一个,直到列表排序)与选择排序(即找到最小的 未排序列表中的项目并将其附加到结果列表的前面)。

而且,这里还有一些问题:

  • Python 通过引用传递变量,这意味着您的函数接收原始列表的句柄而不是副本。如果您在迭代时更改列表(pop() 调用的操作),您将遇到索引错误。

  • 您的 findWords 函数存在缺陷。您从后到前迭代并检查当前元素按字典顺序是否小于其前任元素(即邻居)。您可能想更改 pop 调用 return 语句,不是吗?

我已经快速实现了一些基本的排序算法(没有错误处理、类型比较器的使用等):

def is_list_of_strings(lst):
for i in range(0,len(lst)):
if type(lst[i]) not in (str, unicode):
return False
return True

def is_sorted(lst):
if len(lst) < 2:
return True
for i in range(len(lst) - 1):
if not lst[i] < lst[i + 1]:
return False
return True

def selection_sort(lst):
l = lst[:] # Copy!
r = []
while len(l):
r.append(l.pop(l.index(min(l))))
return r

def insertion_sort(lst):
l = lst[1:] # Copy!
r = [lst[0]]
for e in l:
inserted = False
for w in r:
if e < w:
r.insert(r.index(w), e)
inserted = True
break
if not inserted:
r.append(e)
return r

def bubble_sort(lst):
l = lst[:] # Copy!
while not is_sorted(l):
for i in range(len(l) - 1):
if l[i] > l[i + 1]:
tmp = l[i]
l[i] = l[i + 1]
l[i + 1] = tmp
return l

if __name__ == '__main__':
lst = ['aaa', 'aba', 'aab', 'baz', 'bar']

print('Valid list of strings?', is_list_of_strings(lst))
print(lst, is_sorted(lst))

bbl = bubble_sort(lst)
ins = insertion_sort(lst)
sel = selection_sort(lst)

print(bbl, is_sorted(bbl))
print(ins, is_sorted(ins))
print(sel, is_sorted(sel))

看看它们,尝试理解它们并在线阅读这三种技术。然后尝试使用您自己的函数重新实现它们。祝你编码愉快:)

关于Python 索引错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40106437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com