2015-04-24 6 views

Odpowiedz

4

Jeśli jest to tablica, można użyć numpy.clip.

W przeciwnym razie, myślę, że twoje rozwiązanie jest najlepsze. Możesz też zdefiniować własną funkcję, która działa tak samo dla pojedynczego elementu, jeśli robisz to w wielu miejscach.

+0

'np.clip ([500], 10,100)' +1 Podoba mi się to rozwiązanie :) –

5

Co o:

a = 1 if x < 1 else 10 if x > 10 else x 

Daje czytelność że chciałeś bez redundancji wersji w swoim komentarzu. Jest to gadatliwe, ponieważ najpierw definiuje sprawę centralną, a następnie musi rozróżniać oba końce. Ten sposób robienia tego powoduje przecięcie końców pierwszego, a wszystko, co pozostało, znajduje się w zasięgu.

+5

Nie odrzucę, ale nie zgodzę się z tym, że zagnieżdżone trzytonki są czytelne. –

+0

Moje pytanie zostało zredagowane i dodano tę samą linię, ponieważ napisałem ją w komentarzach. Niemniej +1, bo to jedyny alt, jaki mam. – Schultz9999

-1
a = x if x in range(1,100) else 1 if x < 1 else 100 

Czy naprawdę potrzebujesz podłogi o 1 i cewie o 100?

+1

To zajmuje dużo miejsca, a 'x w zakresie (1, 100)' nie jest lepsze niż '1

+0

, ale jest naprawdę pythonic, czyta się w języku angielskim, jest równe X, jeśli X w zakresie 1 to 100 – Saloparenator

+0

Nadal złe podejście IMO. Nie działa dla 1000000000 na moim komputerze. I '1

2

Innym rozwiązaniem, które można rozważyć więcej pythonic:

if x > 100: 
    x = 100 
elif x < 1: 
    x = 1 
+0

technicznie, pytanie prosi o przypisanie tej wartości do "a" - tak to prawie, ale nie całkiem to spełnia. – gabe

+1

Masz rację, jeśli przypisanie do 'a' jest konieczne, najpierw użyj' a = x', a następnie użyj mojego kodu z 'a' zamiast' x' –

2

Co o coś innego:

a = (1, x, 100)[-(x<1)+1+(x>100)] 

lub jeśli zdefiniować swoje granice jako

lo, hi = (1, 100) 
a = (lo, x, hi)[-(x<lo)+1+(x>hi)] 

Lub zmienić Twoje dane i wygląda bardziej elegancko:

a = (x,lo,hi)[(x<lo)-(x>hi)] 

Jest to możliwe w python, ponieważ booleans zachowuje się jak wartości 0 i 1, dzięki czemu matematyka wewnątrz [] uzyskać odpowiedni indeks krotki.

+0

To jest piękna sztuczka :) Nie można powiedzieć, patoniczne, ale mimo to bardzo twórcze . – Schultz9999