2016-04-16 6 views
5

Sto scrivendo una funzione per aggiungere un input a un elenco. Lo voglio in modo che quando inserisci 280 2 l'elenco diventi ['280', '280'] anziché ['280 2'].Più ingressi da un ingresso

risposta

8
>>> number, factor = input().split() 
280 2 
>>> [number]*int(factor) 
['280', '280'] 

Ricordate che concatenando una lista con se stesso con l'operatore * può avere unexpected results se l'elenco contiene elementi mutabili - ma nel tuo caso va bene.

edit:

soluzione in grado di gestire gli ingressi senza un fattore:

>>> def multiply_input(): 
...  *head, tail = input().split() 
...  return head*int(tail) if head else [tail] 
... 
>>> multiply_input() 
280 3 
['280', '280', '280'] 
>>> multiply_input() 
280 
['280'] 

Aggiungi controllo degli errori, se necessario (ad esempio per gli ingressi vuoti) a seconda del caso d'uso.

+0

Mi piace, ma sembra che si imbatta in un errore quando si entra solo 280, potrei usare il codice brutto come faccio di solito per risolvere questo ma sai di qualsiasi soluzione elegante? –

+0

Questa è magia, grazie. –

2
from itertools import repeat 

mes=input("please write your number and repetitions:").split() 
listt= [] 
listt.extend(repeat(int(mes[0]), int(mes[1])) 

#repeat(object [,times]) -> create an iterator which returns the object 
#for the specified number of times. If not specified, returns the object 
#endlessly. 
+0

Si prega di considerare la spiegazione alla base del codice per rendere più facile per coloro che stanno cercando di imparare da esso. – Reti43

+0

Hai un punto lì! il mio male – Taylan

+1

Grazie! Stavo impazzendo a cercare di .appendere i miei input quando io (a mia insaputa) volevo davvero. –

2

È possibile gestire il caso con il numero imprecisato di ripetizioni estendendo l'ingresso analizzato un elenco comprendente 1. È quindi possibile tagliare l'elenco per lasciare i primi 2 articoli (in caso è stato fornito il numero di ripetizioni, che [1] saranno scartati)

number, rep = (input().split() + [1])[:2] 
[number] * int(rep) 
+0

Un po 'di testo potrebbe aiutare il lettore a comprendere più rapidamente la vostra soluzione. –

+0

@LaurIvan davvero –

0

Questo codice fornisce gestione di eccezioni contro alcun secondo numero essendo provvista in put.

def addtolist(): 
    number = input("Enter number: ") 
    try: 
     factor = input("Enter factor: ") 
    except SyntaxError: 
     factor = 1 
    for i in range(factor): 
     listname.append(number)