对于循环,如果元素不等于value,则替换为空字符串

时间:2012-09-23 23:53:47

标签: python string list replace equals

my_list = ['1 ab ac bbba','23 abcba a aabb ab','345 ccc ab aaaaa']

我试图摆脱数字和空格,基本上所有不是'a','b'或'c'

我尝试了这个,但它没有用,我不确定原因:

for str in my_list:
    for i in str:
        if i != 'a' or 'b' or 'c':
            i = ''
        else:
            pass

我想最终得到:

my_list2 = ['abacbbba','abcbaaaabbab','cccabaaaaa']

3 个答案:

答案 0 :(得分:3)

你误解了or的工作原理:

if i != 'a' or 'b' or 'c':

相当于

if (i != 'a') or ('b') or ('c'):

因此始终为True(因为b评估为True)。

你可能打算写

if i != 'a' and i != 'b' and i != 'c':

也可以写成

if i not in ('a', 'b', 'c'):

或者甚至(因为字符串可以遍历其字符)

if i not in 'abc':

但即便如此,你也没有对这些信息做任何事情;字符串是不可变的,通过将''分配给i,您根本不会更改字符串。因此,如果你想在没有正则表达式的情况下做到这一点,那么正确的方法就是

>>> my_list = ['1 ab ac bbba','23 abcba a aabb ab','345 ccc ab aaaaa']
>>> new_list = [''.join(c for c in s if c in 'abc') for s in my_list]
>>> new_list
['abacbbba', 'abcbaaaabbab', 'cccabaaaaa']

答案 1 :(得分:2)

使用re.sub用空字符串替换非abc的所有内容,即[^abc]

import re
my_list2 = []
for str in my_list:
    my_list2.append(re.sub("[^abc]", "", str))

<强> DEMO

答案 2 :(得分:0)

  m = ['1 ab ac bbba','23 abcba a aabb ab','345 ccc ab aaaaa']
  n=[m[x][m[x].index(" "):] for x in range(len(m))]
  n=[x.replace(" ","") for x in n]