Python 索引超出范围混乱
所以我是编程新手,索引超出范围的错误让我有麻烦。快速示例: 我有一个列表,Python 索引超出范围混乱,python,indexing,range,logic,Python,Indexing,Range,Logic,所以我是编程新手,索引超出范围的错误让我有麻烦。快速示例: 我有一个列表,lst=(5,7,8,9,10) 我想删除每个偶数,以及偶数右边的每个数 我将通过获取每个偶数的索引,'I',并删除lst[I]和lst[I+1]来解决这个问题。当最后一个数字为偶数时,这将不起作用,因为列表中最后一个元素之后没有lst[i+1] 我在几个基本问题上遇到了这个问题。我解决这个问题的方法可能是错误的,因此我想知道: 我怎样才能以这种方式解决问题,无论它是否有效 解决这个问题最有效的方法是什么 您可以检查i+1
lst=(5,7,8,9,10)
我想删除每个偶数,以及偶数右边的每个数
我将通过获取每个偶数的索引,'I'
,并删除lst[I]
和lst[I+1]
来解决这个问题。当最后一个数字为偶数时,这将不起作用,因为列表中最后一个元素之后没有lst[i+1]
我在几个基本问题上遇到了这个问题。我解决这个问题的方法可能是错误的,因此我想知道:
您可以检查
i+1
是否大于(编辑:或等于)列表长度,如果大于,则不执行代码
您还可以在try/except块中处理此问题
至于这种解决方法的效率,我觉得还不错。这种方法的一个缺点是,人们试图在修改列表时对列表进行迭代,这可能会导致未知错误。如果您正在使用
remove()
函数,您可能希望使用列表的副本执行此操作。您可以检查i+1
是否大于(编辑:或等于)列表的长度,如果大于,则不执行代码
您还可以在try/except块中处理此问题
至于这种解决方法的效率,我觉得还不错。这种方法的一个缺点是,人们试图在修改列表时对列表进行迭代,这可能会导致未知错误。如果您使用的是
remove()
功能,您可能需要一份列表副本。欢迎来到俱乐部!编程是一件非常有趣的事情,你可以通过不断的进步来改进。我将尽量详尽地给出我的答案
对于列表(也称为数组),请记住列表及其索引是基于零的。这意味着数组的索引从数字0开始(而不是像正常计数那样从数字1开始)
在本例中,我不会像for或while那样使用你的站循环技术,因为你要移除元素,你要去阵列。如果在循环时删除该项,则会更改数组的长度
相反,您可以通过循环创建一个新数组,并且只向该新数组添加或追加奇数值
arr = [5, 7, 8, 9, 10]
new_arr = []
for idx, val in enumerate(arr):
if idx % 2 == 1:
new_arr.append(val)
return new_arr # yields [7,9] or this process creates a new array of odd elements
此外,请记住,在通过循环进行索引时使用[i+1]
时,提前停止循环元素以避免索引范围外错误是有意义的
执行此操作(无错误)
而不是这个(索引外错误)。原因是,在最后一个元素上,如果尝试向最后一个索引添加1,然后访问不存在的值,则将返回错误:
for idx in range(len(arr)):
# pseudocode
print(arr[i] + arr[i+1])
下面有许多Pythonic(几乎像python特有的口语短语)方法可以更有效地实现您的目标
可以使用切片、间距和del(删除状态)删除偶数个元素
>>> arr = [5, 7, 8, 9, 10]
>>> del arr[::2] # delete even numbers # if you wanted to delete odd numbers del arr[1::2]
>>> arr
[7, 9]
或通过列表理解创建新列表,同时循环通过一些条件来过滤偶数:
new_arr = [elem for idx, elem in enumerate(arr) if idx % 2 == 0]
%运算符用于查看除法是否有余数。所以如果idx是10。那么10%2==0是真的,因为2可以分为10五次,剩余的是0。因此,该元素是均匀的。如果您正在检查奇数,则条件为:
idx % 2 == 1
您可以在这篇伟大的堆栈溢出文章中找到关于这些Python方法的进一步解释,欢迎来到俱乐部!编程是一件非常有趣的事情,你可以通过不断的进步来改进。我将尽量详尽地给出我的答案 对于列表(也称为数组),请记住列表及其索引是基于零的。这意味着数组的索引从数字0开始(而不是像正常计数那样从数字1开始) 在本例中,我不会像for或while那样使用你的站循环技术,因为你要移除元素,你要去阵列。如果在循环时删除该项,则会更改数组的长度 相反,您可以通过循环创建一个新数组,并且只向该新数组添加或追加奇数值
arr = [5, 7, 8, 9, 10]
new_arr = []
for idx, val in enumerate(arr):
if idx % 2 == 1:
new_arr.append(val)
return new_arr # yields [7,9] or this process creates a new array of odd elements
此外,请记住,在通过循环进行索引时使用[i+1]
时,提前停止循环元素以避免索引范围外错误是有意义的
执行此操作(无错误)
而不是这个(索引外错误)。原因是,在最后一个元素上,如果尝试向最后一个索引添加1,然后访问不存在的值,则将返回错误:
for idx in range(len(arr)):
# pseudocode
print(arr[i] + arr[i+1])
下面有许多Pythonic(几乎像python特有的口语短语)方法可以更有效地实现您的目标
可以使用切片、间距和del(删除状态)删除偶数个元素
>>> arr = [5, 7, 8, 9, 10]
>>> del arr[::2] # delete even numbers # if you wanted to delete odd numbers del arr[1::2]
>>> arr
[7, 9]
或通过列表理解创建新列表,同时循环通过一些条件来过滤偶数:
new_arr = [elem for idx, elem in enumerate(arr) if idx % 2 == 0]
%运算符用于查看除法是否有余数。所以如果idx是10。那么10%2==0是真的,因为2可以分为10五次,剩余的是0。因此,该元素是均匀的。如果您正在检查奇数,则条件为:
idx % 2 == 1
您可以从这篇伟大的堆栈溢出文章中找到关于这些Python方法的进一步解释。您可能遇到的一个问题是,在删除过程中,列表索引会发生移动。解决这个问题的一种方法是按降序对要删除的索引进行排序,然后首先删除它们 以下是一个示例,说明如何实现您所寻找的目标:
myList=[5,7,8,9,10]
#使用列表理解获取索引