解决索引超出范围的Python

时间:2014-02-22 21:29:59

标签: python list

我试图仅在一个选择范围内将一个列表的内容添加到另一个列表。我想创建一个包含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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

我会有点间接,但你可以采取一些措施来更好地解决这个问题。首先,这个:

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...