2012-05-13 8 views
21

Biorąc pod uwagę listęKrojenie listę użyciu zmiennej w Pythonie

a = range(10) 

można pokroić go za pomocą stwierdzenia takie jak

a[1] 
a[2:4] 

Jednakże chcę to zrobić na podstawie zmiennej ustawionej gdzie indziej w kodzie. Z łatwością mogę to zrobić dla pierwszego, ale jak to zrobić dla drugiego? Próbowałem indeksowania z listą:

i = [2, 3, 4] 
a[i] 

Ale to nie działa. Próbowałem również użyć ciągu:

i = "2:4" 
a[i] 

Ale to też nie działa.

Czy to możliwe?

Odpowiedz

40

to co slice() jest dla:

a = range(10) 
s = slice(2,4) 
print a[s] 

ale to naprawdę nie jest tak bardzo różni się następnie za pomocą a[2:4].

7

Dlaczego musi to być pojedyncza zmienna? Wystarczy użyć dwóch zmiennych:

i, j = 2, 4 
a[i:j] 

Jeśli naprawdę musi być pojedyncza zmienna można użyć krotki.

+1

Mój przypadek użycia wymagał trochę szczegółowego analizowania html, próbując znaleźć ostatni element w tabeli html. Kod wyglądał jak 'last_row = list (odwrócony (parse_html_rows [-2: -1]))' W przeglądzie kodu zdaliśmy sobie sprawę, że mam wiele "magicznych zakresów" w kodzie do wyrywania różnych rzeczy. Nadanie im imienia ułatwia mi i recenzentowi. 'Last_row_indices = slice (-2, -1)' i 'last_row = list (odwrócone (rows [last_row_indices])) # nie więcej wtf o tym dlaczego - 2: -1' –

2

Przy poniższych zadaniach nadal używasz tego samego rodzaju operacji cięcia, które wyświetlasz, ale teraz ze zmiennymi dla wartości.

a = range(10) 
i = 2 
j = 4 

następnie

print a[i:j] 
[2, 3] 
2
>>> a=range(10) 
>>> i=[2,3,4] 

>>> a[i[0]:i[-1]] 
range(2, 4) 

>>> list(a[i[0]:i[-1]]) 
[2, 3]