如何基于条件合并字符串列表的元素

桑托什·古普塔7

说我有一个这样的字符串列表

stringlist = ['this', 'is', 'a', 'str', '##ing', 'list', 'for', 'ex', '##ample', 'for']

我想合并以“##”开头的元素之前和之上的元素,并删除“##”。

所以'str'和'##ing'将被合并到'string','ex'和'##ample'将被合并到'example'。

所以这将是想要的结果

['this', 'is', 'a', 'string', 'list', 'for', 'example', 'for']

我写了一个 for 循环来解决这个问题

new = []
for idx, ele in enumerate(stringlist):
    if ele.startswith('##'):
        new[-1] = new[-1] + ele[2:]
    else:
        new.append(ele)

是否有计算效率更高或编程更优雅的方法来获得此结果?

亚历克斯·韦古德

这是一个替代解决方案,它成对地遍历列表,如果添加到列表中的最后一项是通过加入对而形成的字符串,则跳过一对。我不知道它会比您现有的解决方案更有效,但它的好处是它不需要修改已添加到新列表中的项目。

def merge(stringlist):
    new = []
    skip = False
     
    for first, second in zip(stringlist, (stringlist[1:] + ['#'])):
        if skip:
            skip = False
        elif second.startswith('#'):
            new.append(f'{first}{second.lstrip("#")}')
            skip = True
        else:
            new.append(first)

    return new

['#']必须添加到stringlist[1:]以补偿zip一旦最短的迭代用完就终止的事实请注意,您也可以使用itertools.zip_longest

输出:

>>> merge(['this', 'is', 'a', 'str', '##ing', 'list', 'for', 'ex', '##ample', 'for', '##a'])
['this', 'is', 'a', 'string', 'list', 'for', 'example', 'fora']
>>> merge(['this', 'is', 'a', 'str', '##ing', 'list', 'for', 'ex', '##ample', 'for'])
['this', 'is', 'a', 'string', 'list', 'for', 'example', 'for']

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用LINQ基于StatrtWith排序字符串列表

如何按多种条件对字符串列表进行排序

如何访问 R 中字符串列表的元素?

如何跳过/忽略字符串列表元素?

如何基于字符串值的参考列表排序字符串列表

如何搜索字符串列表并删除基于名称列表的所有多余字符?

更改字符串列表中的元素

将元素插入字符串列表

解析字符串列表中的元素

按元素添加字符串列表?

如何从列表创建字符串列表

如何将字符串列表与存储在列表中的 numpy 数组合并

如何基于Java中的属性值将对象列表转换为字符串列表?

如何有条件地从字符串列表中删除子字符串?

如何使用Lambda在字符串列表的某些元素中执行子字符串

python如何检查字符串是否是字符串列表的元素

如何将新的字符串元素添加到字符串列表?

如何通过特定的字符串元素将字符串列表拆分为字符串子列表

获取基于字符串列表列标题的列表

Python的字符串列表错误地分隔了值,如何合并损坏的值?

如何将字典条目的值合并到字符串列表

如何合并两个字符串列表?

C / C ++如何合并多个数组/字符串列表?

如何基于以Python中特定字符结尾的分隔符字符串拆分字符串列表?

如何基于pd.DataFrame值创建f字符串列表(类似)?

如何删除以列表开头的字符串列表中的每个元素?

如何转换字符串列表?

如何对字符串列表进行排序

如何对字符串列表进行排序?