Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Loops Python2.7通过自定义序列循环_Loops_Python 2.7_Range - Fatal编程技术网

Loops Python2.7通过自定义序列循环

Loops Python2.7通过自定义序列循环,loops,python-2.7,range,Loops,Python 2.7,Range,新秀问题季继续:) 我有一个函数,它必须输入一定范围内的数值。这部分代码将针对我正在链接的每个数据源进行复制,但会更改数值参数 示例(有效): for i in [0, 1, 2, 3, 7, 8, 15, 31, 32]: RowTDE(i) 问题 我希望避免键入所有必要的值,因此我希望使用以下内容: for i in [:2]+[7:10]+[15:]: RowTDE(i) 我试过了,得到了: SyntaxError:无效语法 我需要先创建一个整数列表才能使用它吗?像 i

新秀问题季继续:)

我有一个函数,它必须输入一定范围内的数值。这部分代码将针对我正在链接的每个数据源进行复制,但会更改数值参数

示例(有效):

for i in [0, 1, 2, 3, 7, 8, 15, 31, 32]:
    RowTDE(i)
问题

我希望避免键入所有必要的值,因此我希望使用以下内容:

for i in [:2]+[7:10]+[15:]:
    RowTDE(i)
我试过了,得到了:

SyntaxError:无效语法

我需要先创建一个整数列表才能使用它吗?像

intList = [1, 2, 3, 4, ... 33].
此外,如前所述,对于每个数据源,该范围将有所不同,但最大数值将小于40(每个数字表示一个列索引)

像往常一样,我非常感谢你在这方面的帮助,如果你需要更多信息,请告诉我


星期一早上好:)

您可以添加
范围
s:

>>> for i in range(3) + range(7, 9) + range(15, 16) + range(31, 33):
        print i


0
1
2
7
8
15
31
32
或者构建
范围
,然后将其切片:

>>> r = range(33)
>>> for i in r[:3] + r[7:9] + r[15:16] + r[31:]:
    print i


0
1
2
7
8
15
31
32

但是您不能对任何内容进行切片,因此,
[:2]
本身就是一个
语法错误

切片符号本身没有意义。它由支持它的对象使用
\uu getitem\uu
方法实现

您可以(ab)使用
\uuuu getitem\uuu
创建使用该语法的对象:

import itertools

class SliceAbuse(object):
    def __getitem__(self, key):
        last = None

        for obj in key:
            if isinstance(obj, slice):
                for n in xrange(obj.start, obj.stop + 1, obj.step or 1):
                    last = n
                    yield n
            elif obj is Ellipsis:
                for n in itertools.count(last + 1):
                    yield n
            else:
                last = obj
                yield obj
例如:

for n in SliceAbuse()[1:5, 7:9, 11, ...]:  # To infinity and beyond
    print n

    if n == 20:
        break
尽管您的范围非常小,但可以使用Python 2中的
range()
返回一个列表对象,您可以将该对象与其他列表连接起来:

range(1, 4) + range(10, 15) == [1, 2, 3, 10, 11, 12, 13, 14]

请注意,这在Python 3中不起作用,因为
range
不会返回列表。

非常确定您想要
range(33)
?range(33)会返回0:33吗?我只需要特定的列号,即0:3和5:7列。切片表示法在支持它的对象上。它不可能独立存在。谢谢你Jornsharpe,这就是我要找的:)谢谢Blender的建议。我想我会坚持jon的答案,因为实现起来有点简单:)@dce:是的,我有点错过了“40岁以下元素”部分。但我也会保留你的帖子,将来可能需要它!)