在列表中添加某些元素

问题描述 投票:-1回答:1

我有一个包含字符串的列表,如果它们不是字母,我想添加两个相邻的元素。这是我的清单。

n=['u', '<', '=', 'd', 'd', '<', '<', 'f']

现在,如果列表中的大于,等于和小于符号彼此相邻,则将它们组合在一起。我尝试了很多方法,但是找不到不是超级无效或不起作用的方法。

python list
1个回答
3
投票

您可以使用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实现的。

© www.soinside.com 2019 - 2024. All rights reserved.