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']
答案 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
用空字符串替换非a
,b
或c
的所有内容,即[^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]