Python2.7编辑字符串
我想知道如何删除字符串中除方括号以外的所有内容 如果用户输入Python2.7编辑字符串,python,string,python-2.7,Python,String,Python 2.7,我想知道如何删除字符串中除方括号以外的所有内容 如果用户输入“您好,我的名字是[lol]bob[不是[真的]]john[son]”或输入“[[[]][[[]]” 如果用户输入类似于第一条语句的内容,我想删除除括号以外的所有内容。我不想实现输入验证。干杯 编辑:感谢我爱你的朋友们的帮助您可以使用: 输出: [][[]][] 使用lambda和filter——这只是另一种方法,但我发现它更漂亮 >>> your_input = "Hello, my name is [lol] b
“您好,我的名字是[lol]bob[不是[真的]]john[son]”
或输入“[[[]][[[]]”
如果用户输入类似于第一条语句的内容,我想删除除括号以外的所有内容。我不想实现输入验证。干杯
编辑:感谢我爱你的朋友们的帮助您可以使用:
输出:
[][[]][]
使用
lambda
和filter
——这只是另一种方法,但我发现它更漂亮
>>> your_input = "Hello, my name is [lol] bob [not[really]] john[son]"
>>> ''.join(filter(lambda x: x in '[]', your_input))
'[][[]][]'
当对答案有疑问时,值得尝试一些并确定时间:
PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]] john[son]'
"@ @"
for x in frozenset(s)-frozenset('[]'):
s = s.replace(x, '')
"@
1000000 loops, best of 3: 0.844 usec per loop
PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]] john[son]'
"@ "''.join(c for c in s if c in '[]')"
100000 loops, best of 3: 4.79 usec per loop
PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]] john[son]'
"@ @"
s.translate(str.maketrans('','',''.join(set(s)-set('[]'))))
"@
100000 loops, best of 3: 8.5 usec per loop
PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]] john[son]'
"@ "''.join(filter(lambda x: x in '[]', s))"
100000 loops, best of 3: 9.67 usec per loop
PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]] john[son]'
import re
"@ "re.sub('[^][]', '', s)"
100000 loops, best of 3: 15.9 usec per loop
因此@guess现在删除的答案在要删除的字符集上使用s.replace()
似乎是最快的,正则表达式替换是最慢的(但这是Python 3.3和我的机器,其他可能不同)
还请注意,如果将上述所有设置字符串替换为:
s = 'Hello, my name is [lol] bob [not[really]] john[son]'*1000
那么我得到的时间是:
10000 loops, best of 3: 190 usec per loop
100 loops, best of 3: 3.6 msec per loop
100 loops, best of 3: 4.25 msec per loop
100 loops, best of 3: 8.72 msec per loop
100 loops, best of 3: 7.13 msec per loop
因此,
re.sub
比lambda
解决方案的缩放效果更好,但其他解决方案保持在相同的相对位置。删除除方括号外的所有内容,因此除了方括号外,其他内容都不应保留?或者它们的内容也不保留?很好地编辑了前面的问题,删除了“我也可以做什么…”,并将其作为一个单独的问题提出……尽管我相信您最初希望删除括号内的所有内容……”Python 3用户将不得不使用list(filter()),如果有人看到这个答案的话不;str.join
对iterable非常满意。它不需要具体化的序列。@DSM您误解了我的意思;这不是关于join()
,而是关于filter()的输出
。在Python 3中,如果您没有明确声明列表
,则返回一个位于的筛选器对象,该对象当然不能加入,因为它不是列表
——因此我的回答完全正确。不,我认为您误解了str.join
。您说“当然不能加入,因为它不是列表”,这是错误的。正如我所说:str.join
对iterable非常满意。你自己试试。哈,这很奇怪。我不知道过滤器
对象是iterable。谢谢你启发我!当你计时lambda
和过滤器
时,效率几乎是最低的,绝对不是最有效的。
10000 loops, best of 3: 190 usec per loop
100 loops, best of 3: 3.6 msec per loop
100 loops, best of 3: 4.25 msec per loop
100 loops, best of 3: 8.72 msec per loop
100 loops, best of 3: 7.13 msec per loop