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']
最佳答案
您误解了或
的工作原理:
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']
关于python - for循环,如果元素不等于值,则替换为空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12557299/