对于给定的列表,我希望:
我可以使用合并range(len(mylist))
和::
表示法按顺序对列表进行切片:
1::3 will give me the elements at indices 1, 4, 7, 10 etc.
::2 will give me the elements at indices 0, 2, 4, 6 etc.
但这里有一些问题:
Python是否为自定义逐步切片提供了内置机制? FWIW,我实际上正在处理一个大熊猫(版本0.18.0)系列,我刚刚使用了常规列表的例子以便于解释。
答案 0 :(得分:5)
您不需要对数据进行多次传递,也不需要进行任何切片:
def nop(x): return x
def op1(x): return x.upper()
def op2(x): return x[::-1]
data = 'One Two Three Four Five Six Seven Eight Nine'.split()
result = [(nop, op1, op2)[i % 3](x) for i, x in enumerate(data)]
产生以下result
:
['One', 'TWO', 'eerhT', 'Four', 'FIVE', 'xiS', 'Seven', 'EIGHT', 'eniN']
如果不清楚,这里发生的是(nop, op1, op2)
的第{i%3}个元素被x
作为参数调用,对于每个索引i
枚举x
中的元素data
。
显然,如果你需要做到 data
而不是返回一个新列表,你可以在常规for
循环中这样做:
for i, x in enumerate(data):
data[i] = (nop, op1, op2)[i % 3](x)