Chciałbym móc przekonwertować ciąg znaków, taki jak "1,2,5-7,10" na listę python, taką jak [1,2,5, 6,7,10]. Rozejrzałem się i znalazłem this, ale zastanawiałem się, czy istnieje prosty i prosty sposób na to w Pythonie.Jak przekonwertować numeryczne łańcuchy znaków na listę w Pythonie
Odpowiedz
>>> def f(x):
... result = []
... for part in x.split(','):
... if '-' in part:
... a, b = part.split('-')
... a, b = int(a), int(b)
... result.extend(range(a, b + 1))
... else:
... a = int(part)
... result.append(a)
... return result
...
>>> f('1,2,5-7,10')
[1, 2, 5, 6, 7, 10]
To może być przesada, ale tak jak pyparsing:
from pyparsing import *
def return_range(strg, loc, toks):
if len(toks)==1:
return int(toks[0])
else:
return range(int(toks[0]), int(toks[1])+1)
def parsestring(s):
expr = Forward()
term = (Word(nums) + Optional(Literal('-').suppress() + Word(nums))).setParseAction(return_range)
expr << term + Optional(Literal(',').suppress() + expr)
return expr.parseString(s, parseAll=True)
if __name__=='__main__':
print parsestring('1,2,5-7,10')
byłem w stanie dokonać prawdziwą zrozumieniem na to pytanie:
>>> def f(s):
return sum(((list(range(*[int(j) + k for k,j in enumerate(i.split('-'))]))
if '-' in i else [int(i)]) for i in s.split(',')), [])
>>> f('1,2,5-7,10')
[1, 2, 5, 6, 7, 10]
>>> f('1,3-7,10,11-15')
[1, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15]
się inna odpowiedź, która udawała, że jest zrozumiała, była po prostu pętlą for, ponieważ ostatnia lista została odrzucona. :)
Dla Pythona 2 można nawet usunąć połączenie z list
!
Ugh, odpowiedzi są tak pełne gadek! Oto odpowiedź krótka i elegancki:
def rangeString(commaString):
def hyphenRange(hyphenString):
x = [int(x) for x in hyphenString.split('-')]
return range(x[0], x[-1]+1)
return chain(*[hyphenRange(r) for r in commaString.split(',')])
Demo:
>>> list(f('1,2,5-7,10'))
[1, 2, 5, 6, 7, 10]
łatwo modyfikowalny obsłużyć liczb ujemnych lub zwróci listę. Będziesz także potrzebował from itertools import chain
, ale możesz go zastąpić sum(...,[])
, jeśli nie pracujesz z obiektami range
(lub sum(map(list,iters),[])
) i nie dbasz o to, aby być leniwym.
Bezrozumienie bije moje!
import re
def convert(x):
return sum((i if len(i) == 1 else list(range(i[0], i[1]+1))
for i in ([int(j) for j in i if j] for i in
re.findall('(\d+),?(?:-(\d+))?', x))), [])
Najlepsze jest to, że dwa razy użyć zmiennej i
w środku zrozumieniem.
>>> convert('1,2,5-7,10')
[1, 2, 5, 6, 7, 10]
bardzo krótki, a elegancki (imho):
>>> txt = "1,2,5-7,10"
>>> # construct list of xranges
>>> xranges = [(lambda l: xrange(l[0], l[-1]+1))(map(int, r.split('-'))) for r in txt.split(',')]
>>> # flatten list of xranges
>>> [y for x in xranges for y in x]
[1, 2, 5, 6, 7, 10]
- 1. Przerwij łańcuch na listę znaków w Pythonie
- 2. Jak przekonwertować bajty i łańcuchy w Pythonie 3?
- 3. Jak przekonwertować tę listę na słownik w Pythonie?
- 4. Jak przekonwertować listę słowników na słownik list w Pythonie?
- 5. Jak przekonwertować ciąg znaków na utf-8 w Pythonie
- 6. Jak przekonwertować ciąg znaków na bufor w Pythonie 3.1?
- 7. W Pythonie, w jaki sposób przekonwertować listę elementów i ciągów znaków na kod Unicode?
- 8. Numeryczne rozwiązywanie ODE w Pythonie
- 9. Jak przekonwertować listę (Long) na tablicę znaków? (VB)
- 10. Jak przekonwertować listę obiektów na listę interfejsów?
- 11. Jak przekonwertować tablicę znaków na tablicę znaków?
- 12. Jak przekonwertować numeryczne na nvarchar w komendzie sql
- 13. Jak przekonwertować zmienne łańcuchowe na zmienne numeryczne w Stata?
- 14. Konwertuj listę na ciąg znaków ze spacjami w pythonie
- 15. Jak dołączyć dwa łańcuchy znaków?
- 16. Jak przekonwertować łańcuchy liczb wymiernych i dziesiętnych na zmiennoprzecinkowe w pythonie?
- 17. Zmutowane łańcuchy znaków w języku Python
- 18. Jak przekonwertować zagnieżdżoną listę list na listę krotek w pythonie 3.3?
- 19. Czy łańcuchy są zestawiane w Pythonie
- 20. Jak przekonwertować hex na dziesiętny w Pythonie?
- 21. Jak przekonwertować cyfry na alfabet w Pythonie?
- 22. Jak przekonwertować ciąg na int w Pythonie?
- 23. konwersja liczby całkowitej na listę w pythonie
- 24. Konwertowanie ciągów znaków na listy w pythonie
- 25. Wieloplatformowe łańcuchy znaków (i Unicode) w C++
- 26. Jak przekonwertować ciąg znaków szesnastkowy na ciąg bajtów w Perlu?
- 27. Jak przekonwertować listę na ciąg w Emacs Lisp
- 28. pyton przekonwertować listę pływaka ciąg
- 29. Jak mogę ocenić listę ciągów jako listę krotek w Pythonie?
- 30. Jak przekonwertować JSONArray na listę z Gsonem?
że działa świetnie. Dzięki! – jncraton
To by zrobił ładny generator. –
@ Jon pamiętaj, aby zaakceptować odpowiedź, jeśli była przydatna! Zobacz [faq # howtoask] ... dzięki! – Trufa