Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析索引超出范围Python_Python_List - Fatal编程技术网

解析索引超出范围Python

解析索引超出范围Python,python,list,Python,List,我试图将一个列表中的内容添加到另一个列表中,仅在选定范围内。我想创建一个包含700多个元素的列表。然后我想从第34个元素开始获取元素,然后继续获取第11个元素。但是我在解决索引超出范围的问题时遇到了一个小问题,我知道这个问题是由指向不存在的元素引起的。我也知道列表的大小会受到通过它计数的影响。我对python有点缺乏经验,所以我不确定在这种情况下如何防止它。如果有人能帮我解决这个索引超出范围的问题,那就太好了 这是我的密码: main_list = [] for i in range(705)

我试图将一个列表中的内容添加到另一个列表中,仅在选定范围内。我想创建一个包含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
main_list=[]
对于范围(705)内的i:
主列表。附加(i)
子列表=[]
def my_范围(开始、结束、步骤):

而startPython索引是基于零的。最后一个元素位于索引
len(我的列表)-1
。您应该更改行
,而start我会有点间接,但是您可以做一些事情来更好地解决这个问题。首先,这是:

main_list = []

for i in range(705):
    main_list.append(i)
可以用

main_list = range(34, 705)
Range返回一个列表,因此无需通过迭代来填充另一个列表。其次,有几种方法可以追踪列表中的每一个第十一个元素,但我个人的偏好是,当我看到这样的东西时,我会把它看作是一个同余类。然后我会使用如下函数:

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

旁白:为什么不干脆
main\u list=range(705)
?不需要做额外的循环。@DSM不需要整个循环,
range(34705,11)
提供了
sublist
。另一个快捷方式是:
sublist=main\u list[34::11]
找到了。非常感谢。
sub_list=[x代表x范围内的x(34705,11)]
会这样做。请记住,您可以为
range
xrange
函数提供
step
参数。正如我所说,考虑到我的数学背景,我更愿意将这些东西看作同余类。这与我用%2而不是&1来确定奇数与偶数的原因是一样的,尽管后者更快。最短的解决方案就是
范围(34705,11)
,至少在Python 2中是这样。行
[x代表x在xrange(34,705,11)]
最好写成
list(xrange(34,705,11))
(或者
list(range(34,705,11))
在Python 3中。@JackGibbs在Python中使用列表理解更标准。类似于(假装该范围没有采用阶跃参数)
[x代表范围内的x(34507),如果(x-34)%11==0]