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岁以下元素”部分。但我也会保留你的帖子,将来可能需要它!)