反转大型迭代器的有效方法

2024-07-04 08:01:54 发布

您现在位置:Python中文网/ 问答频道 /正文

这听起来有点疯狂,但我有一个带有N = 10**409元素的迭代器。有没有办法从“列表”的末尾获取项目?也就是说,当我打电话给next(iterator)时,它会给我最后想要做的事情,但要得到我想要做的第一件事情,我需要打next(iterator)N次电话。 如果我做类似list(iterator).reverse()的事情,它当然会因为内存不足而崩溃

编辑:迭代器如何与简化示例一起使用:

# prints all possible alphabetical character combinations that can fit in a tweet
chars = "abcdefghijklmnopqrstuvwxyz "
cproduct = itertools.product(chars,repeat=250)
for subset in cproduct:
    print(''.join(subset))

# will start with `aaaaaaaa...aaa`
# but I want it to start with `zzz...zzz`

Tags: 项目in元素列表with事情startnext
1条回答
网友
1楼 · 发布于 2024-07-04 08:01:54

对于某些问题,可以反向计算元素。对于您提供的示例,可以简单地反转您正在获取产品的项目

在本例中,我们在获取产品以获得“反向迭代器”之前反转符号:

>>> symbols = "abc"

>>> perms = itertools.product(symbols, repeat=5)
>>> perms = ["".join(x) for x in perms]
>>> perms
['aaaaa', 'aaaab', 'aaaac', 'aaaba', 'aaabb',
 ...,
 'cccbb', 'cccbc', 'cccca', 'ccccb', 'ccccc']

>>> perms_rev = itertools.product(symbols[::-1], repeat=5)
>>> perms_rev = ["".join(x) for x in perms_rev]
>>> perms_rev
['ccccc', 'ccccb', 'cccca', 'cccbc', 'cccbb',
 ...,
 'aaabb', 'aaaba', 'aaaac', 'aaaab', 'aaaaa']

>>> perms_rev == perms[::-1]
True

相关问题 更多 >

    热门问题