elenco indici devono essere numeri interi, non str
ho 2 tipi di elenchi: i nomi e i punteggi e sto cercando di combinare i punteggi in modo che tutti i punteggi sono combinati in un elenco esistente
Continuo a ricevere la “lista gli indici devono essere interi, non str” errore
name1= [jim, bob, john, smith]
score1= [4,7,3,11]
name2= [bob, cahterine, jim, will, lucy]
score2= [6,12,7,1,4]
Voglio che il risultato sia:
name1 = [jim, bob, john, smith, catherine, will, lucy]
score2 = [11, 13 ,3 ,11 ,12 ,1 ,4]
def merge(name1,score1, name2,score2):
for i in name2:
if i in name1:
indexed= name1.index(i)
score2[i] =score1[int(indexed)]+score2[i]
if i not in name1:
name1.append(i)
score1.append(score2[(name1.index(i))])
- Perché non ti unisci a loro, semplicemente:
name1 = name1 + name2
escore2 = score1 + score2
? - icanc: OP vogliono i punteggi combinati per nome. Che è, la lista risultante deve avere solo una voce per ogni nome, e un punteggio pari alla somma dei punteggi associati con il nome di elenchi di immissione.
- Ah, grazie per il chiarimento.
Si hanno punteggi che sono concettualmente associati con nomi. Questo ti dice che sei un errato struttura di dati. In particolare, i numeri rappresentano i punteggi che si sta andando ad essere l’aggiunta di fino, o, più precisamente, conteggio up.
Python ha un built-in strumento per questo.
Per il tuo messaggio di errore, significa esattamente quello che dice, e @BryanOakley già spiegato abbondantemente. Ma devo sottolineare che in programmazione, è necessario essere precisi e coerenti, e costantemente prestare attenzione ai dettagli. Buone abitudini di evitare questi errori, perché si sono costantemente pensando esattamente cosa si sta facendo e esattamente cosa significa. Stile convenzioni di aiuto, anche:
Nome iteratore dopo la cosa che in realtà contiene. Dal momento che, in Python, scorrere un elenco in realtà ti dà gli elementi dall’elenco (non intero gli indici di borsa), utilizzare un nome che suggerisce un effettivo elemento di elenco, e non qualcosa di blando come
i
.Nome elenchi e altri contenitori con un nome plurale, in modo che il codice, naturalmente, descrive quello che succede. Quindi, scrivere le cose come
for name in names:
.Ma dico “attenzione ai dettagli” perché
Quando si registra il codice, non il tipo di fuori; copia e incolla in modo che siamo in grado di vedere esattamente ciò che hai.
Ortografia conta. Errori di battitura male (
cahterine
).Stringhe virgolette intorno a loro. Non ottenere stringhe confuso con i nomi delle variabili.
Si può considerare l’immissione di dati in
Contatore
classe dacollezioni
modulo. Per esempio:Questo viene stampato il seguente:
Inoltre, guarda Karl risposta. Semplifica ancora di più.
Counter(zip(name1, score1))
etc.Counter(dict(zip(name1, score1)))
. Ho solo voluto mostrare la procedura per l’OP così sarebbe più facile da seguire. Si può semplificare il tutto molto di più, e, naturalmente, come in Karl risposta.Fiducia nel messaggio di errore: sta dicendo esattamente che cosa il problema è. Quando si esegue
score2[i]
, chiedetevi: “che cosa sono io?”In questo contesto, vi è un elemento di nome2. Anche se il codice di esempio mostra come
[bob, cahterine, jim, will, lucy]
, sto cercando di indovinare chi sono delle stringhe.ho ottenuto questo lavoro, ma non so se è quello che stai cercando?
è possibile utilizzare list comprehensions