我有一个包含字符串的列表,如果它们不是字母,我想添加两个相邻的元素。这是我的清单。
n=['u', '<', '=', 'd', 'd', '<', '<', 'f']
现在,如果列表中的大于,等于和小于符号彼此相邻,则将它们组合在一起。我尝试了很多方法,但是找不到不是超级无效或不起作用的方法。
您可以使用itertools.groupby
有效地遍历这些组,然后将结果累积到新列表中,从而可以加入,附加或扩展该组。...所以:]]
>>> from itertools import groupby >>> n = ['u', '<', '=', 'd', 'd', '<', '<', 'f'] >>> new_n = [] >>> for is_letter, group in groupby(n, str.isalpha): ... if not is_letter: ... new_n.append(''.join(group)) ... else: ... new_n.extend(group) ... >>> new_n ['u', '<=', 'd', 'd', '<<', 'f']
并且只是为了阐明
itertools.groupby
的作用:
>>> [(k, list(g)) for k,g in groupby(n, str.isalpha)] [(True, ['u']), (False, ['<', '=']), (True, ['d', 'd']), (False, ['<', '<']), (True, ['f'])]
很好的是,它在列表上进行了一次遍历(给您线性时间复杂度,并且应该在分组方面达到您希望的效率,因为
itertools
是用C实现的。