Python 用repeat()重复单个值,repeat()
函数的功能似乎有点奇怪:重复返回单个值。在需要单个值的时候可以用它替代cycle()
函数。
选择所有数据和部分数据的差别在于:表达式(x==0 for x in cycle(range(size)))
生成序列[True, False, False, ...]
,用于选取部分数据;表达式(x==0 for x in repeat(0))
生成序列[True, True, True, ...]
,用于选取全部数据。
考虑如下代码:
all = repeat(0)
subset = cycle(range(100))
choose = lambda rule: (x == 0 for x in rule)
# choose(all) or choose(subset) can be used
只需简单修改参数,就可以切换选择全部数据或部分数据。扩展该方法可实现随机选取数据集,如下所示:
def randseq(limit):
while True:
yield random.randrange(limit)
randomized = randseq(100)
randseq()
函数在指定范围内生成无限长的随机数序列,丰富了的cycle()
和repeat()
两种拣选模式。
不同拣选方法的实现如下:
[v for v, pick in zip(data, choose(all)) if pick]
[v for v, pick in zip(data, choose(subset)) if pick]
[v for v, pick in zip(data, choose(randomized)) if pick]
使用chose(all)
,chose(subset)
或者chose(randomized)
可以方便地为后续分析提供输入数据。