Python将字符串转换为忽略特殊字符的列表
我有一个字符串:Python将字符串转换为忽略特殊字符的列表,python,string,list,Python,String,List,我有一个字符串: 'Current Weather\n\t\n\n\t\t12:36 AM\n\t\n\n\n\n\t\t\t22°\n\t\t\n\n\t\t\t\tC\n\t\t\t\n\n\n\t\tRealFeel®\n\t\t20°\n\t\n\n\t\tMostly clear' 我想将其转换为一个列表,如下所示:- ['Current Weather','12:36 AM','22°','C','RealFeel®','20°','Mostly clear'] 是否有任何pyt
'Current Weather\n\t\n\n\t\t12:36 AM\n\t\n\n\n\n\t\t\t22°\n\t\t\n\n\t\t\t\tC\n\t\t\t\n\n\n\t\tRealFeel®\n\t\t20°\n\t\n\n\t\tMostly clear'
我想将其转换为一个列表,如下所示:-
['Current Weather','12:36 AM','22°','C','RealFeel®','20°','Mostly clear']
是否有任何python模块或函数可供我使用?您可以使用:
输出:
您可以使用:
输出:
不带正则表达式:
[x.strip() for x in st.splitlines() if x.strip()!= '']
['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']
输出:
[x.strip() for x in st.splitlines() if x.strip()!= '']
['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']
不带正则表达式:
[x.strip() for x in st.splitlines() if x.strip()!= '']
['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']
输出:
[x.strip() for x in st.splitlines() if x.strip()!= '']
['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']
为什么每个人都在使用
re
?此库速度非常慢。您可以只使用str.split
,如果与参数一起使用,则必须手动执行str.isspace
,但速度仍然非常快,代码如下:
>>> [i.strip() for i in s.split('\n\t') if not i.isspace()]
['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']
基准:
>>> timeit.timeit(r"re.split(r'[\n\t]+', s)",r"""
import re
s = 'Current Weather\n\t\n\n\t\t12:36 AM\n\t\n\n\n\n\t\t\t22°\n\t\t\n\n\t\t\t\tC\n\t\t\t\n\n\n\t\tRealFeel®\n\t\t20°\n\t\n\n\t\tMostly clear'
""")
2.8587728
timeit.timeit(r"[i.strip() for i in s.split('\n\t') if not i.isspace()]",r"""import re
s = 'Current Weather\n\t\n\n\t\t12:36 AM\n\t\n\n\n\n\t\t\t22°\n\t\t\n\n\t\t\t\tC\n\t\t\t\n\n\n\t\tRealFeel®\n\t\t20°\n\t\n\n\t\tMostly clear'
""")
1.8853902
为什么每个人都在使用
re
?此库速度非常慢。您可以只使用str.split
,如果与参数一起使用,则必须手动执行str.isspace
,但速度仍然非常快,代码如下:
>>> [i.strip() for i in s.split('\n\t') if not i.isspace()]
['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']
基准:
>>> timeit.timeit(r"re.split(r'[\n\t]+', s)",r"""
import re
s = 'Current Weather\n\t\n\n\t\t12:36 AM\n\t\n\n\n\n\t\t\t22°\n\t\t\n\n\t\t\t\tC\n\t\t\t\n\n\n\t\tRealFeel®\n\t\t20°\n\t\n\n\t\tMostly clear'
""")
2.8587728
timeit.timeit(r"[i.strip() for i in s.split('\n\t') if not i.isspace()]",r"""import re
s = 'Current Weather\n\t\n\n\t\t12:36 AM\n\t\n\n\n\n\t\t\t22°\n\t\t\n\n\t\t\t\tC\n\t\t\t\n\n\n\t\tRealFeel®\n\t\t20°\n\t\n\n\t\tMostly clear'
""")
1.8853902
您可以使用Python正则表达式。以下是一个例子:
import re
def sentance_to_list(sentence):
ls=re.split(r'["\t|\n"]\s*', sentence) # split \t or \n
return ls
strr='Current Weather\n\t\n\n\t\t12:36 AM\n\t\n\n\n\n\t\t\t22°\n\t\t\n\n\t\t\t\tC\n\t\t\t\n\n\n\t\tRealFeel®\n\t\t20°\n\t\n\n\t\tMostly clear'
newstrr=sentance_to_list(strr)
print(newstrr)
输出:
['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']
你可以阅读更多关于re的内容,你可以使用Python正则表达式。以下是一个例子:
import re
def sentance_to_list(sentence):
ls=re.split(r'["\t|\n"]\s*', sentence) # split \t or \n
return ls
strr='Current Weather\n\t\n\n\t\t12:36 AM\n\t\n\n\n\n\t\t\t22°\n\t\t\n\n\t\t\t\tC\n\t\t\t\n\n\n\t\tRealFeel®\n\t\t20°\n\t\n\n\t\tMostly clear'
newstrr=sentance_to_list(strr)
print(newstrr)
输出:
['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']
您可以在re上阅读更多内容请显示您迄今为止尝试的内容。请显示您迄今为止尝试的内容。为什么上面的代码在REPL模式和print()语句中显示不同的输出?有没有办法解决这个问题?
>>x
总是输出repr(x)
<代码>>>打印(x)输出str(x)
。实际的数据结构始终是字符串列表。不要被它的不同表示法(不是REPL模式)弄糊涂,但是当我试图打印列表的第二个元素时,它显示的索引超出范围x=re.split(r'[\n\t]+',s);打印(x[2])
outputs22°
在我的控制台中我的代码crntwthrrprt=repr(datas[0])#repr(datas[0])包含复制到crntwthrrpt Current_Weather_Report=re.split(r'[\n\t]+',crntwthrrprt)print(Current_Weather_Report[2])OUTPUT回溯(最近一次调用):文件“scraping.py”,第28行,正在打印(当前天气报告[2])索引器:列出索引超出范围
为什么上面的代码在REPL模式和print()语句中显示不同的输出?有没有办法解决这个问题?>>x
总是输出repr(x)
<代码>>>打印(x)输出str(x)
。实际的数据结构始终是字符串列表。不要被它的不同表示法(不是REPL模式)弄糊涂,但是当我试图打印列表的第二个元素时,它显示的索引超出范围x=re.split(r'[\n\t]+',s);打印(x[2])
outputs22°
在我的控制台中我的代码crntwthrrprt=repr(datas[0])#repr(datas[0])包含复制到crntwthrrpt Current_Weather_Report=re.split(r'[\n\t]+',crntwthrrprt)print(Current_Weather_Report[2])OUTPUT回溯(最近一次调用):文件“scraping.py”,第28行,打印中(当前天气报告[2])索引器:列表索引超出范围