给定一个列表:

import string
a = list(string.ascii_lowercase)

返回第n个m个元素块的Python方法是什么?请注意,这与仅返回every nth element不同。

3个元素的3个块中的每1个块的期望结果(3个,跳过6个,3个跳过,6个...):
['a', 'b', 'c', 'j', 'k', 'l', 's', 't', 'u']

我可以这样:
import itertools
s1 = a[::9]
s2 = a[1::9]
s3 = a[2::9]
res = list(itertools.chain.from_iterable(zip(s1,s2, s3)))

有没有更清洁的方法?

最佳答案

对于固定的选择和跳过顺序,您可以在窗口的总长度(此处为9)上包装取模的索引,然后仅选择在给定阈值以下的那些:3

lst = [x for i, x in enumerate(a) if i % 9 < 3]
print(lst)
# ['a', 'b', 'c', 'j', 'k', 'l', 's', 't', 'u']

您可以将其变成一个功能,使其使用起来更加直观:
def select_skip(iterable, select, skip):
    return [x for i, x in enumerate(iterable) if i % (select+skip) < select]

print(select_skip(a, select=3, skip=6))
# ['a', 'b', 'c', 'j', 'k', 'l', 's', 't', 'u']

关于python - 从 list 中取出第n个区块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46282825/

10-10 10:20