我有一个包含字符串的迭代器:
it = (_ for _ in ['aaxbb', 'aayybb', 'aaaaaaabb', 'ccabcavabb', 'yyaaadbb', 'yyaabb', 'a'])
Run Code Online (Sandbox Code Playgroud)
如果它们具有相同的第一个和最后两个字符,我想将这些字符串分组.上例中groupby的最终结果应该是:
[['aaxbb', 'aayybb', 'aaaaaaabb'],
['ccabcavabb'],
['yyaaadbb', 'yyaabb'],
['a']]
Run Code Online (Sandbox Code Playgroud)
可以使用这个复杂的组来实现itertools.groupby吗?
根本不复杂,只返回第一个和最后两个字符的元组:
lambda v: (v[:2], v[-2:])
Run Code Online (Sandbox Code Playgroud)
或者,如果你想使用operator.itemgetter():
from operator import itemgetter
itemgetter(slice(2), slice(-2, None))
Run Code Online (Sandbox Code Playgroud)
演示:
>>> from itertools import groupby
>>> from operator import itemgetter
>>> sample = ['aaxbb', 'aayybb', 'aaaaaaabb', 'ccabcavabb', 'yyaaadbb', 'yyaabb', 'a']
>>> for key, group in groupby(sample, lambda v: (v[:2], v[-2:])):
... print list(group)
...
['aaxbb', 'aayybb', 'aaaaaaabb']
['ccabcavabb']
['yyaaadbb', 'yyaabb']
['a']
>>> for key, group in groupby(sample, itemgetter(slice(2), slice(-2, None))):
... print list(group)
...
['aaxbb', 'aayybb', 'aaaaaaabb']
['ccabcavabb']
['yyaaadbb', 'yyaabb']
['a']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |