繁体   English   中英

解决索引超出范围Python

[英]Resolving Index out of Range Python

我试图将一个列表的内容仅跨选择范围添加到另一个列表中。 我想创建一个包含700多个元素的列表。 比我想让元素从第34个元素开始,然后再继续获取第11个元素。 但是我在解决索引超出范围问题时遇到了一个小问题,我知道该问题是由指向不存在的元素引起的。 我也知道列表的大小会受到计数的影响。 我对python有点经验,所以我不确定在这种情况下如何防止它。 如果有人可以帮助我解决此索引超出范围的问题,那就太好了。

这是我的代码:

main_list = []

for i in range(705):
    main_list.append(i)

sublist = []

def my_range(start, end, step):
    while start <= end:
        yield start
        start += step

for x in my_range(34, 705, 11):
    sublist.append(main_list[x])

print sublist

Python索引基于零。 最后一个元素在索引len(my_list)-1 您应while start <= end: while start < end:将行更改为while start < end:

无论如何,您似乎都重新实现了xrange

我会有点间接,但是您可以做一些事情来更好地解决这个问题。 首先,这是:

main_list = []

for i in range(705):
    main_list.append(i)

可以用

main_list = range(34, 705)

Range返回一个列表,因此不需要通过迭代来填充另一个列表。 其次,有很多方法可以获取列表的第11个元素,但是当我看到类似的东西时,我个人的喜好是将事物视为全等类。 因此,我将使用以下功能:

sub_list = []
def eleventh_element(a_list):
    for elem in a_list:
        if (elem - 34) % 11 == 0:
            sub_list.append(elem)

尽管实际上它可能是:

sub_list = filter(lambda x: not ((x - 34) % 11), range(34, 705))

给予:

>>> sub_list = filter(lambda x: not ((x - 34) % 11), range(34, 705))
>>> sub_list
[34, 45, 56, 67, 78, 89, 100, 111, 122, 133, 144, ...and so on...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM