W moim programie użytkownik wprowadza numer n
, a następnie wprowadza n
liczbę łańcuchów, które są zapisywane na liście.
Muszę zakodować w taki sposób, że jeśli istnieje określony indeks listy, uruchom funkcję.
Sytuację komplikuje fakt, że zagnieżdżałem oświadczenia if dotyczące len(my_list)
.
Oto uproszczona wersja tego, co mam teraz, która nie działa:
n = input ("Define number of actors: ")
count = 0
nams = []
while count < n:
count = count + 1
print "Define name for actor ", count, ":"
name = raw_input ()
nams.append(name)
if nams[2]: #I am trying to say 'if nams[2] exists, do something depending on len(nams)
if len(nams) > 3:
do_something
if len(nams) > 4
do_something_else
if nams[3]: #etc.
python
python-2.7
user1569317
źródło
źródło
n
jako liczbę całkowitą, a nie listę. Jestem zmieszany.n
zamiastnams
wif
slen
lista jest przynajmniej pewną wartością?Odpowiedzi:
Czy byłoby bardziej przydatne, gdybyś wykorzystał długość listy
len(n)
do podjęcia decyzji, zamiast sprawdzaćn[i]
każdą możliwą długość?źródło
Muszę zakodować w taki sposób, że jeśli istnieje określony indeks listy, uruchom funkcję.
To idealne zastosowanie dla bloku próbnego :
Jednak z definicji wszystkie pozycje na liście Pythona między
0
ilen(the_list)-1
istnieją (tj. Nie ma potrzeby próbować, chyba że wiesz0 <= index < len(the_list)
).Możesz użyć enumerate, jeśli chcesz indeksy od 0 do ostatniego elementu:
Jeśli szukasz jakiejś określonej myśli „indeksowej”, myślę, że zadajesz niewłaściwe pytanie. Być może powinieneś rozważyć użycie kontenera mapowania (takiego jak dykt) zamiast kontenera sekwencji (takiego jak lista). Możesz przepisać swój kod w ten sposób:
Działa tak:
Możesz także użyć metody .get zamiast próbować / z wyjątkiem krótszej wersji:
źródło
try
nie nie powiedzieć, czy indeks istnieje tylko jeśli jest fetchable - przystawka-1
- że wskaźnik tak naprawdę nie istnieje , ale wartość będzie zwracana.len(nams)
powinien być równyn
w twoim kodzie. Wszystkie indeksy0 <= i < n
„istnieją”.źródło
Można to zrobić po prostu za pomocą następującego kodu:
źródło
Wiesz już, jak to zrobić i faktycznie już wykonujesz takie testy w swoim kodzie .
Poprawne indeksy do listy długości
n
są0
poprzezn-1
włącznie.Zatem lista ma indeks
i
wtedy i tylko wtedy, gdy długość listy wynosi co najmnieji + 1
.źródło
Najszybszym sposobem sprawdzenia, czy indeks istnieje, byłoby użycie długości listy:
To również sprawdza ujemne indeksy i większość typów sekwencji (Like
ranges
istr
s), które mają długość.Jeśli i tak potrzebujesz później uzyskać dostęp do elementu w tym indeksie, łatwiej jest poprosić o przebaczenie niż o pozwolenie , a także jest szybszy i bardziej Pythonic. Użyj
try: except:
.Byłoby to w przeciwieństwie do:
źródło
Jeśli chcesz iterować wstawione dane aktorów:
źródło
ok, więc myślę, że faktycznie jest to możliwe (ze względu na argument):
źródło
3 in range(len(your_list)
3 in xrange(len(your_list)
- prawdopodobnie nie da rady zrobić lepiej niż toMożesz spróbować czegoś takiego
źródło
Oneliner:
Pełny przykład:
Tylko dla informacji. Imho,
try ... except IndexError
to lepsze rozwiązanie.źródło
Nie zostawiaj miejsca przed wspornikami.
Przykład:
Wskazówka: dodaj komentarze nad i / lub pod kodem. Nie za twoim kodem.
Miłego dnia.
źródło
Wiele odpowiedzi, ale nie ta prosta.
Aby sprawdzić, czy indeks 'id' istnieje w słowniku słownika:
zwraca prawdę, jeśli istnieje „wiek”.
źródło