Si potrebbe utilizzare espressioni regolari per raggiungere questo succintamente. Ciò, tuttavia, aggira la tua domanda su come operare sugli elementi della lista dipendenti. Crediti a mbomb007 per migliorare la funzionalità dei caratteri consentiti.
import re
z = re.findall('\*[^*]+',"".join(x))
Uscite:
['*abc', '*de', '*f', '*g']
Piccolo analisi comparativa:
Donkey Kong's answer:
import timeit
setup = '''
import re
x = ['*a', 'b', 'c', '*d', 'e', '*f', '*g']
y = ['*a', 'b', 'c', '*d', 'e', '*f', '*g'] * 100
'''
print (min(timeit.Timer('re.findall("\*[^\*]+","".join(x))', setup=setup).repeat(7, 1000)))
print (min(timeit.Timer('re.findall("\*[^\*]+","".join(y))', setup=setup).repeat(7, 1000)))
Restituisce 0.00226416693456
e 0.06827958075
, rispettivamente.
Chepner's answer:
setup = '''
x = ['*a', 'b', 'c', '*d', 'e', '*f', '*g']
y = ['*a', 'b', 'c', '*d', 'e', '*f', '*g'] * 100
def chepner(x):
partials = []
for element in x:
if element.startswith('*'):
partials.append([])
partials[-1].append(element)
concat = map("".join, partials)
return concat
'''
print (min(timeit.Timer('chepner(x)', setup=setup).repeat(7, 1000)))
print (min(timeit.Timer('chepner(y)', setup=setup).repeat(7, 1000)))
ritorni rispettivamente 0.00456210269896
e 0.364635824689
,.
Saksham's answer
setup = '''
x = ['*a', 'b', 'c', '*d', 'e', '*f', '*g']
y = ['*a', 'b', 'c', '*d', 'e', '*f', '*g'] * 100
'''
print (min(timeit.Timer("['*'+item for item in ''.join(x).split('*') if item]", setup=setup).repeat(7, 1000)))
print (min(timeit.Timer("['*'+item for item in ''.join(y).split('*') if item]", setup=setup).repeat(7, 1000))))
Returns 0.00104848906006
e 0.0556093171512
rispettivamente.
tl; dr Saksham è leggermente più veloce del mio, quindi Chepner segue entrambi i nostri.
Bello. +1 per riportare la discussione su "* pythonic *" e lontano da necklace/compact/fast. – LondonRob
Aggiunta la risposta al mio piccolo punto di riferimento, se siete interessati :) – miradulo
Il mio tempo lento su un grande input non mi sorprende :) Tuttavia, se 'x' fosse davvero così grande, guarderei in costruzione' concat 'come costruisco' x', piuttosto che aspettare che 'x' sia completo per iniziare. – chepner