Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将字符串转换为忽略特殊字符的列表_Python_String_List - Fatal编程技术网

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])
outputs
22°
在我的控制台中我的代码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])
outputs
22°
在我的控制台中我的代码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])索引器:列表索引超出范围