首页 > 解决方案 > 在Python中按索引从字符串中删除多个元素

问题描述

我有一个字符串和该字符串中每个位置的相关分数列表。如何删除低于某个阈值的该字符串的所有元素?

我可以创建使用列表中介的解决方法,并且我已经看到了一次解决这个问题的一个元素的答案,但是我还没有看到任何可以直接按位置删除多个元素的东西。一次执行此操作的主要问题是会改变剩余元素的位置。

>>> import string
>>> import numpy as np

>>> sequence = ''.join(np.random.choice(list(string.ascii_uppercase), 10))
>>> sequence
'BQJVESXZBW'
>>> scores = np.random.uniform(size=10)
>>> scores
[0.99023134, 0.21286886, 0.10760723, 0.50485956, 0.207736, 0.76909266, 0.62174588, 0.89416775, 0.60837875, 0.32754857]
>>> threshhold = 0.50

输出应该删除第二个、第三个、第五个和第十个元素,留下'BVSXZB'

标签: pythonstringpython-2.7

解决方案


这是一种方法:

In [11]: scores
Out[11]: 
array([0.00397126, 0.88897497, 0.06103467, 0.27202612, 0.50436342,
       0.09516024, 0.92886696, 0.24499752, 0.40425165, 0.90589889])

In [12]: ''.join(ch for (ch, score) in zip(sequence, scores) if score >= threshold)
Out[12]: 'BFHC'

推荐阅读