Mam ciąg jako: -

'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'

Chcę przekształcić go w listę jako: -

['Current Weather','12:36 AM','22°','C','RealFeel®','20°','Mostly clear']

Czy jest jakiś moduł lub funkcja Pythona, za pomocą której mogę to zrobić?

1
Manish Shah 1 kwiecień 2020, 10:33

4 odpowiedzi

Najlepsza odpowiedź

Możesz użyć re.split:

import re

s = 'Current Weather\n\t\n.....t\tMostly clear'
re.split(r'[\n\t]+', s)

Wynik:

['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']
5
S3DEV 1 kwiecień 2020, 08:32

Dlaczego wszyscy używają re? Ta biblioteka jest bardzo powolna. Możesz po prostu użyć str.split, jeśli używasz jej z argumentami, będziesz musiał wykonać str.isspace ręcznie, ale nadal jest dość szybki, to jest kod:

>>> [i.strip() for i in s.split('\n\t') if not i.isspace()]
['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']

Benchmarki:

>>> 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
2
xkcdjerry 1 kwiecień 2020, 08:07

Bez wyrażenia regularnego:

[x.strip() for x in st.splitlines() if x.strip()!= '']

wyjście:

['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']
0
Pygirl 1 kwiecień 2020, 08:02

Możesz użyć wyrażenia regularnego Pythona. Oto przykład:

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) 

Wynik:

['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']

Możesz przeczytać więcej na re https://docs.python.org/3/library/ re.html

0
Sayed Hisham 1 kwiecień 2020, 08:17