我的代码如下:
value = "123456"
我想要去除除了2和5以外的所有数字。输出应该是25
。
即使改变value的值,程序也应该可以工作。例如:
value = "463312"
输出结果应该是2。
我尝试使用remove()
和replace()
函数,但它们都没有奏效。
这是在Python 3.6.2上操作。
不要试图移除每个不想要的字符,相比之下,建立一个白名单,列出你想在结果中保留的字符会更加有效:
>>> value = '123456'
>>> whitelist = set('25')
>>> ''.join([c for c in value if c in whitelist])
'25'
这里还有一种隐式循环的选项。我们构建一个映射表,用于与 str.translate
一起使用,其中每个字符都映射到 ''
,除非另有说明:
>>> from collections import defaultdict
>>> d = defaultdict(str, str.maketrans('25', '25'))
>>> '123456'.translate(d)
'25'
re.sub
将除了 25
之外的所有字符替换为 ''
。import re
x = "463312"
new = re.sub('[^25]+' ,'', x)
x = "463532312"
new = re.sub('[^25]+' ,'', x)
2
,522
In [60]: value = "123456"
In [61]: whitelist = set("25")
In [62]: filter(lambda x: x in whitelist, value)
Out[62]: '25'
"".join()
操作。list()
! - Jerrybibostr.join
来处理结果吗?在 Python 3 中,filter
只会返回一个惰性的 filter
对象。 - Graiphervalue="23456"
j=""
for k in value:
if k=='2' or k=='5':
j=j+k
print (j)
这是你所说的程序,您可以为该值提供任何输入,它将始终打印25。
我尝试使用Python内置的filter()
方法和lambda
来不同地处理这个问题。见下方:
a = "1225866125" # Should return "22525"
whitelist = '25'
# Use filter to remove all elements that does not match the condition
a = "".join(filter(lambda c: c in whitelist, a))
whitelist = '25'
也可以,不需要元组。 - salparadisevalue = "123456"
whitelist = '25'
''.join(set(whitelist) & set(value))
'25'
value="1122355"
,它能工作吗? - MD. Khairul Basarvalue="1122355"
,它会输出 2255
吗? - MD. Khairul Basar