Dragðu út, skiptu út og umbreyttu tilteknum þáttum Python lista (fylki)

Viðskipti

Til að búa til nýjan lista í Python með því að draga út eða eyða aðeins þeim þáttum í núverandi lista (fylki) sem uppfylla ákveðin skilyrði, eða með því að framkvæma skipti eða umbreytingar, notaðu listaskilning.

Eftirfarandi er útskýrt hér ásamt sýnishornskóða.

  • Grunnform listaskilnings
  • Notaðu ferlið á alla þætti listans
  • Dragðu út og eyddu þáttum úr listanum sem uppfylla skilyrðin
  • Skiptu um eða umbreyttu þáttum sem uppfylla skilyrði listans

Sjá eftirfarandi grein fyrir sérstök dæmi um lista yfir strengi.

Einnig er hægt að draga út þætti sem uppfylla ekki skilyrðin af handahófi.

Athugaðu að listar geta geymt mismunandi tegundir gagna og eru algjörlega frábrugðnar fylkjum. Ef þú vilt meðhöndla fylki í ferlum sem krefjast minnisstærðar og minnisfönga eða tölulegrar vinnslu stórra gagna, notaðu fylki (venjulegt bókasafn) eða NumPy.

Eftirfarandi listi er dæmi

l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

Grunnform listaskilnings

Þegar nýr listi er búinn til úr lista er einfaldara að skrifa listaskilning en lykkjur.

[expression for any variable name in iterable object if conditional expression]

Tjáning er beitt á frumefni sem uppfyllir skilyrta tjáningu endurtekins hlutar (svo sem lista eða túpel) og verður þáttur í nýjum lista. Hægt er að sleppa „ef skilyrtri tjáningu“, en þá er tjáningunni beitt á alla þætti.

Sjá eftirfarandi grein til að fá frekari upplýsingar, þar á meðal neðsta listaskilning.

Notaðu ferlið á alla þætti listans

Til dæmis, ef þú vilt beita einhverri vinnslu á alla þætti lista, lýsið vinnslunni sem óskað er eftir í listaskilningstjáningunni hér að ofan.

l_square = [i**2 for i in l]
print(l_square)
# [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]

l_str = [str(i) for i in l]
print(l_str)
# ['-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5']

Þetta er hægt að nota til að breyta á milli lista yfir tölur og lista yfir strengi.

Dragðu út og eyddu þáttum úr listanum sem uppfylla skilyrðin

Ef þátturinn á aðeins að vera valinn með skilyrtri tjáningu, er hann ekki unnin af segð, þannig að hann tekur eftirfarandi form

[variable name for variable name in original list if conditional expression]

Nýr listi er myndaður þar sem aðeins þættir sem uppfylla skilyrðið (þættir sem skilyrta tjáningin er sönn fyrir) eru dregin út.

l_even = [i for i in l if i % 2 == 0]
print(l_even)
# [-4, -2, 0, 2, 4]

l_minus = [i for i in l if i < 0]
print(l_minus)
# [-5, -4, -3, -2, -1]

Ef „ef skilyrt tjáning“ er stillt á „ef ekki skilyrt tjáning“ verður það afneitun og aðeins er hægt að velja og draga út þætti sem uppfylla ekki skilyrðið (þættir sem skilyrta tjáningin er röng fyrir). Með öðrum orðum, nýr listi er búinn til þar sem þættir sem uppfylla skilyrðið eru fjarlægðir.

l_odd = [i for i in l if not i % 2 == 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if not i < 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

Auðvitað fæst sama niðurstaða með því að tilgreina jafngilda skilyrta tjáningu án þess að nota ekki.

l_odd = [i for i in l if i % 2 != 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if i >= 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

Skilyrt tjáningarhlutinn getur verið mörg skilyrði. Einnig er hægt að nota neikvæðar ekki.

l_minus_or_even = [i for i in l if (i < 0) or (i % 2 == 0)]
print(l_minus_or_even)
# [-5, -4, -3, -2, -1, 0, 2, 4]

l_minus_and_odd = [i for i in l if (i < 0) and not (i % 2 == 0)]
print(l_minus_and_odd)
# [-5, -3, -1]

Skiptu um eða umbreyttu þáttum sem uppfylla skilyrði listans

Í dæminu um frumefnisútdrátt hér að ofan voru þættir sem uppfylltu ekki skilyrðin fjarlægðir.

Ef þú vilt framkvæma staðgöngur, umbreytingar o.s.frv. aðeins á þáttum sem uppfylla skilyrðin, notaðu þrískiptinguna á tjáningarhluta listaskilningsins.

Í Python er hægt að skrifa þrískiptinguna sem hér segir

True Value if Conditional Expression else False Value
a = 80
x = 100 if a > 50 else 0
print(x)
# 100

b = 30
y = 100 if b > 50 else 0
print(y)
# 0

Það er dálítið flókið, en samsetningin á listaskilningi og þrískiptingum er sem hér segir.

[True Value if Conditional Expression else False Value for any variable name in original list]

Hlutinn innan sviga er þrískiptur rekstraraðili (svigir eru ekki nauðsynlegir í raunverulegum kóða).

[(True Value if Conditional Expression else False Value) for any variable name in original list]

Ef eitthvert breytuheiti er skrifað eins og það er fyrir sönn eða ósönn gildi, er gildi upprunalega þáttarins notað eins og það er. Ef tjáning er skrifuð er vinnsla þeirrar tjáningar beitt.

l_replace = [100 if i > 0 else i for i in l]
print(l_replace)
# [-5, -4, -3, -2, -1, 0, 100, 100, 100, 100, 100]

l_replace2 = [100 if i > 0 else 0 for i in l]
print(l_replace2)
# [0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 100]

l_convert = [i * 10 if i % 2 == 0 else i for i in l]
print(l_convert)
# [-5, -40, -3, -20, -1, 0, 1, 20, 3, 40, 5]

l_convert2 = [i * 10 if i % 2 == 0 else i / 10 for i in l]
print(l_convert2)
# [-0.5, -40, -0.3, -20, -0.1, 0, 0.1, 20, 0.3, 40, 0.5]
Copied title and URL