Als lijstindex bestaat, voer dan X uit

In mijn programma voert de gebruiker het nummer nin en voert vervolgens het naantal strings in, die in een lijst worden opgeslagen.

Ik moet zo coderen dat als een bepaalde lijstindex bestaat, dan een functie uitvoeren.

Dit wordt nog gecompliceerder door het feit dat ik if-statements heb genest over len(my_list).

Hier is een vereenvoudigde versie van wat ik nu heb, die niet werkt:

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.

Antwoord 1, autoriteit 100%

Kan het nuttiger voor u zijn om de lengte van de lijst len(n)te gebruiken om uw beslissing te informeren in plaats van n[i]te controleren voor elke mogelijke lengte ?


Antwoord 2, autoriteit 53%

Ik moet zo coderen dat als een bepaalde lijstindex bestaat, dan een functie uitvoeren.

Dit is het perfecte gebruik voor een try block:

ar=[1,2,3]
try:
    t=ar[5]
except IndexError:
    print('sorry, no 5')   
# Note: this only is a valid test in this context 
# with absolute (ie, positive) index
# a relative index is only showing you that a value can be returned
# from that relative index from the end of the list...

Echter, per definitie bestaan alle items in een Python-lijst tussen 0en len(the_list)-1(dwz er is geen try-blok nodig als je weet 0 <= index < len(the_list)).

U kunt enumerategebruiken als u de indexen tussen 0 en de laatste element:

names=['barney','fred','dino']
for i, name in enumerate(names):
    print(i + ' ' + name)
    if i in (3,4):
        # do your thing with the index 'i' or value 'name' for each item...

Als je op zoek bent naar een gedefinieerde ‘index’-gedachte, denk ik dat je de verkeerde vraag stelt. Misschien kunt u overwegen een mapping-container te gebruiken (zoals als een dictaat) versus een reekscontainer (zoals een lijst). Je zou je code als volgt kunnen herschrijven:

def do_something(name):
    print('some thing 1 done with ' + name)
def do_something_else(name):
    print('something 2 done with ' + name)        
def default(name):
    print('nothing done with ' + name)     
something_to_do={  
    3: do_something,        
    4: do_something_else
    }        
n = input ("Define number of actors: ")
count = 0
names = []
for count in range(n):
    print("Define name for actor {}:".format(count+1))
    name = raw_input ()
    names.append(name)
for name in names:
    try:
        something_to_do[len(name)](name)
    except KeyError:
        default(name)

Loopt als volgt:

Define number of actors: 3
Define name for actor 1: bob
Define name for actor 2: tony
Define name for actor 3: alice
some thing 1 done with bob
something 2 done with tony
nothing done with alice

Je kunt ook de .getmethode gebruiken in plaats van probeer/behalve een kortere versie:

>>> something_to_do.get(3, default)('bob')
some thing 1 done with bob
>>> something_to_do.get(22, default)('alice')
nothing done with alice

Antwoord 3, autoriteit 11%

len(nams)moet gelijk zijn aan nin je code. Alle indexen 0 <= i < n“bestaat”.


Antwoord 4, autoriteit 9%

Het kan eenvoudig worden gedaan met behulp van de volgende code:

if index < len(my_list):
    print(index, 'exists in the list')
else:
    print(index, "doesn't exist in the list")

Antwoord 5, autoriteit 4%

Het gebruik van de lengte van de lijst zou de snelste oplossing zijn om te controleren of er een index bestaat:

def index_exists(ls, i):
    return (0 <= i < len(ls)) or (-len(ls) <= i < 0)

Dit test ook op negatieve indices en de meeste reekstypen (zoals rangesen strs) die een lengte hebben.

Als je achteraf toch toegang moet krijgen tot het item in die index, is het gemakkelijker om vergeving te vragen dan toestemming, en het is ook sneller en Pythonischer. Gebruik try: except:.

try:
    item = ls[i]
    # Do something with item
except IndexError:
    # Do something without the item

Dit is in tegenstelling tot:

if index_exists(ls, i):
    item = ls[i]
    # Do something with item
else:
    # Do something without the item

Antwoord 6, autoriteit 4%

Ik moet zo coderen dat als een bepaalde lijstindex bestaat, dan een functie uitvoeren.

U weet al hoe u hiervoor moet testen en voert in feite al dergelijke tests uit in uw code.

De geldige indices voor een lijst met lengte nzijn 0tot en met n-1inclusief.

Een lijst heeft dus een index ials en alleen alsde lengte van de lijst minimaal i + 1is.


Antwoord 7, autoriteit 2%

Als u de ingevoegde acteursgegevens wilt herhalen:

for i in range(n):
    if len(nams[i]) > 3:
        do_something
    if len(nams[i]) > 4:
        do_something_else

Antwoord 8

ok, dus ik denk dat het echt mogelijk is (voor de duidelijkheid):

>>> your_list = [5,6,7]
>>> 2 in zip(*enumerate(your_list))[0]
True
>>> 3 in zip(*enumerate(your_list))[0]
False

Antwoord 9

Je kunt zoiets proberen

list = ["a", "b", "C", "d", "e", "f", "r"]
for i in range(0, len(list), 2):
    print list[i]
    if len(list) % 2 == 1 and  i == len(list)-1:
        break
    print list[i+1];

Antwoord 10

Oneliner:

do_X() if len(your_list) > your_index else do_something_else()  

Volledig voorbeeld:

In [10]: def do_X(): 
    ...:     print(1) 
    ...:                                                                                                                                                                                                                                      
In [11]: def do_something_else(): 
    ...:     print(2) 
    ...:                                                                                                                                                                                                                                      
In [12]: your_index = 2                                                                                                                                                                                                                       
In [13]: your_list = [1,2,3]                                                                                                                                                                                                                  
In [14]: do_X() if len(your_list) > your_index else do_something_else()                                                                                                                                                                      
1

Alleen ter info. Imho, try ... except IndexErroris een betere oplossing.


Antwoord 11

Hier is een eenvoudige, zij het rekenkundig inefficiënte manier waarop ik vandaag zin had om dit probleem op te lossen:

Maak gewoon een lijst met beschikbare indexen in my_list met:

indices = [index for index, _val in enumerate(my_list)]

Dan kun je voor elk codeblok testen:

if 1 in indices:
    "do something"
if 2 in indices:
    "do something more"

maar iedereen die dit leest, zou eigenlijk gewoon het juiste antwoord moeten nemen van: @user6039980


Antwoord 12

Veel antwoorden, niet de simpele.

Om te controleren of er een index ‘id’ bestaat in het woordenboek dict:

dic = {}
dic['name'] = "joao"
dic['age']  = "39"
if 'age' in dic

retourneert waar als ‘leeftijd’ bestaat.


Antwoord 13

Laat geen ruimte voor uw haakjes.

Voorbeeld:

n = input ()
         ^

Tip:
U dient opmerkingen over en/of onder uw code toe te voegen. Niet achter je code.


Een fijne dag verder.

Other episodes