我有元组列表:
tupl = [('0', 'Hey'),('1', ','),('2', 'I'), ('3', 'feel'),('4', 'you'), ('5', '!')]
我要删除任何包含标点符号的元组。
我已经尝试使用以下代码,但是它适用于'!'
,只是因为我不知道如何在此代码中放置多个条件。
out_tup = [i for i in tupl if '!' not in i]
print out_tup
如何删除所有包含标点符号(例如','
)的元组?
答案 0 :(得分:3)
使用any
例如:
import string
tupl = [('0', 'Hey'),('1', ','),('2', 'I'), ('3', 'feel'),('4', 'you'), ('5', '!')]
print([i for i in tupl if not any(p in i for p in string.punctuation)])
#or
print([i for i in tupl if not any(p in i for p in [",", "!"])])
答案 1 :(得分:1)
我们可以将条件if '!' not in i
更改为if '!' not in i and ',' not in i
。
tupl = [('0', 'Hey'),('1', ','),('2', 'I'), ('3', 'feel'),('4', 'you'), ('5', '!')]
out_tup = [i for i in tupl if '!' not in i and ',' not in i]
print(out_tup)
答案 2 :(得分:1)
添加and ',' not in i
完整代码如下:
tupl = [('0', 'Hey'),('1', ','),('2', 'I'), ('3', 'feel'),('4', 'you'), ('5', '!')]
out_tup = [i for i in tupl if '!' not in i and ',' not in i]
print(out_tup)
答案 3 :(得分:0)
import re
tupl = [('0', 'Hey'),('1', ','),('2', 'I'), ('3', 'feel'),('4', 'you'), ('5', '!')]
out_tup = [i for i in tupl if not re.search(r"[!,]", i[1])]
print(out_tup) # [('0', 'Hey'), ('2', 'I'), ('3', 'feel'), ('4', 'you')]
其中
r"[!,]"
可以使用不需要的标点符号进行扩展
答案 4 :(得分:0)
您可以使用此:
out_tup = [i for i in tupl if not i[1] in [',','!']]
答案 5 :(得分:0)
使用正则表达式:
import re, string
tupl = [('0', 'Hey'), ('1', ','), ('2', 'I'), ('3', 'feel'), ('4', 'you'), ('5', '!')]
rx = re.compile('[{}]'.format(re.escape(string.punctuation)))
print(list(filter(lambda t: not rx.search(t[1]), tupl)))
输出:
[('0', 'Hey'), ('2', 'I'), ('3', 'feel'), ('4', 'you')]
在Rextester上演示。