Czy można to zrobić w jednym wierszu w Pythonie?
if <condition>:
myList.append('myString')
Wypróbowałem operator trójskładnikowy:
myList.append('myString' if <condition>)
ale moje IDE ( MyEclipse ) nie podobało się, bez pliku else.
Czy można to zrobić w jednym wierszu w Pythonie?
if <condition>:
myList.append('myString')
Wypróbowałem operator trójskładnikowy:
myList.append('myString' if <condition>)
ale moje IDE ( MyEclipse ) nie podobało się, bez pliku else.
Odpowiedzi:
Tak, możesz to zrobić:
<condition> and myList.append('myString')
Jeśli <condition>jest fałszywe, włączy się zwarcie, a prawa strona nie zostanie oceniona. Jeśli <condition>jest prawdziwe, zostanie oceniona prawa strona, a element zostanie dołączony.
Zaznaczę tylko, że zrobienie powyższego jest całkiem nie-pythonowe i prawdopodobnie najlepiej byłoby napisać to, niezależnie od:
if <condition>: myList.append('myString')
Demonstracja:
>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
E701 multiple statements on one linewięc także nie-pythonowy ...;)
x = object.get('attribute')w tym przypadku
Powód, dla którego język nie pozwala na użycie składni
variable = "something" if a_condition
bez elsejest to, że w przypadku a_condition == False, gdy variablenagle jest nieznane. Może mogłoby tak być domyślnie None, ale Python wymaga, aby wszystkie przypisania zmiennych w rzeczywistości skutkowały jawnymi przypisaniami. Dotyczy to również przypadków, takich jak wywołania funkcji, jako wartość przekazana do funkcji jest oceniany tak jak RHS instrukcji przypisania będzie.
Podobnie, wszystkie returns muszą faktycznie powrócić, nawet jeśli są warunkowe return. Na przykład:
return variable if a_condition
nie jest dozwolone, ale
return variable if a_condition else None
jest dozwolone, ponieważ drugi przykład gwarantuje, że jawnie coś zwróci.
variable=Nonejest żadna, ale jest całkowicie legalna. : D
continue if i == 0w pętli for.
else pass?
else passnie działa, ponieważ wyrażenie trójargumentowe powinno zwracać wartość, do której można przekazać return. passnie jest prawidłową returnwartością.
if a_condition: variable = "something"i if a_condition: return variablesą legalne. Jest to więc zasadniczo arbitralny wybór składniowy języka Python.
if <condition>: myList.append('myString')
W przeciwnym razie nie. Dlaczego trzeba umieścić to w jednej linii?
Zauważ, że „operator trójskładnikowy” to operator . Jak każdy operator, musi coś zwrócić , więc jak można mieć operator trójskładnikowy bez elseklauzuli? Co ma zwrócić, jeśli warunek nie jest prawdziwy?
Zasadniczo prosisz o do_thing() if <condition> else passkonstrukt (który wyrzuci SyntaxError, jeśli zostanie uruchomiony). Jak odkryłem podczas badań, podobne pytanie (nieco) do_thing() if condition else Nonejest tak bliskie, jak tylko możesz (co jest po prostu innym sposobem <condition> and do_thing()). Podsumowując ten pomysł i inne odpowiedzi, oto opcje:
if <condition>: myList.append('myString') - wydaje się najmniej „hacky” (a zatem preferowany) sposób<condition> and myList.append('myString')myList.append('myString') if <condition> else NonemyList.extend(['myString'] if condition else []) również zadziała, chociaż to więcej pracy niż inne rozwiązania.
Możesz zrobić coś takiego:
myList.append('myString') if <condition> else False
lub
myList.append('myString') if <condition> else 0
myList.append('myString') if True else _ale jeśli nie przypisujesz niczego, nie ma to znaczenia. Martwię się jednak, że ta osoba próbuje zrozumieć listę z podobną logiką.
Zrobiłbym to po prostu, jeśli chcę dodać opcjonalne elementy do listy na podstawie warunku.
nums = [
1,
2,
3 if <condition> else None,
4,
]
nums = [i for i in nums if i is not None]
to po prostu zastępuje wartość wartością Brak, jeśli warunek nie jest spełniony, a następnie po prostu ponownie definiuje listę bez wartości Brak. w ten sposób zachowują swój indeks, jeśli warunek jest spełniony