web-dev-qa-db-fra.com

Obtenir une liste de nombres en entrée de l'utilisateur

J'ai essayé d'utiliser raw_input() pour obtenir une liste de nombres, mais avec le code

numbers = raw_input()
print len(numbers)

l'entrée [1,2,3] donne un résultat de 7, je suppose donc qu'elle interprète l'entrée comme s'il s'agissait d'une chaîne. Existe-t-il un moyen direct d’en faire une liste? Peut-être que je pourrais utiliser re.findall pour extraire les entiers, mais si possible, je préférerais utiliser une solution plus Pythonic.

50
Underyx

Dans Python 3.x, utilisez ceci.

a = [int(x) for x in input().split()]

Exemple

>>> a = [int(x) for x in input().split()]
3 4 5
>>> a
[3, 4, 5]
>>> 
76
greentec

Il est beaucoup plus facile d'analyser une liste de nombres séparés par des espaces plutôt que d'essayer d'analyser la syntaxe Python:

Python 3:

s = input()
numbers = list(map(int, s.split()))

Python 2:

s = raw_input()
numbers = map(int, s.split())
56
Sven Marnach

eval(a_string) évalue une chaîne en tant que code Python. Évidemment ce n'est pas particulièrement sûr. Vous pouvez obtenir une évaluation plus sûre (plus restreinte) en utilisant la fonction literal_eval du module ast.

raw_input() est appelé ainsi dans Python 2.x car il obtient une entrée brute et non "interprétée". input() interprète l'entrée, c'est-à-dire est équivalent à eval(raw_input()).

Dans Python 3.x, input() fait ce que raw_input() faisait, et vous devez évaluer le contenu manuellement si c'est ce que vous voulez (c'est-à-dire eval(input())).

6
Karl Knechtel

Vous pouvez utiliser .split()

numbers = raw_input().split(",")
print len(numbers)

Cela vous donnera toujours des chaînes, mais ce sera une liste de chaînes.

Si vous avez besoin de les mapper à un type, utilisez la liste de compréhension:

numbers = [int(n, 10) for n in raw_input().split(",")]
print len(numbers)

Si vous voulez pouvoir entrer n'importe quel type Python et le faire mapper automatiquement et vous faites confiance à vos utilisateurs IMPLICITEMENT, vous pouvez alors utiliser eval

5
Sean Vieira

Une autre façon pourrait être d'utiliser la boucle for pour celle-ci. Supposons que vous souhaitiez que l'utilisateur entre 10 chiffres dans une liste nommée "mémo"

memo=[] 
for i in range (10):
    x=int(input("enter no. \n")) 
    memo.insert(i,x)
    i+=1
print(memo) 
4
Ayan Khan
num = int(input('Size of elements : '))
arr = list()

for i in range(num) :
  ele  = int(input())
  arr.append(ele)

print(arr)
3
rashedcs
a=[]
b=int(input())
for i in range(b):
    c=int(input())
    a.append(c)

Les extraits de code ci-dessus constituent une méthode simple pour obtenir des valeurs de l'utilisateur.

1
Nikhil Suresh

vous pouvez passer une représentation sous forme de chaîne de la liste à json:

import json

str_list = raw_input("Enter in a list: ")
my_list = json.loads(str_list)

l’utilisateur entre dans la liste comme vous le feriez en python: [2, 34, 5.6, 90]

1
Logan

La réponse est triviale. essaye ça.

x=input()

Supposons que [1,3,5,'aA','8as'] soit donné en tant qu'entrées

print len(x)

cela donne une réponse de 5

print x[3]

cela donne 'aA'

1
Achintha Avin

Je pense que cela va faire le travail:

val = map(int, input().split()) print(list(val))

0
gii96

Obtenir une liste de numéro en entrée de l'utilisateur.

Cela peut être fait en utilisant list en python.

L=list(map(int,input(),split()))

Ici L indique une liste, map est utilisé pour mapper une entrée avec la position, int spécifie le type de données de l'entrée utilisateur qui est un type de données entier, et split () est utilisé pour diviser le nombre en fonction de l'espace.

.

enter image description here

0
Mani Kandan

Dans Python 3:

input_list = [int(x.strip()) for x in input("enter list:").strip()[1:-1].split(",")]

Il demandera à "entrer dans la liste", il suffit donc d'entrer dans la liste comme [2,4,5]

(common_py3) PS E:\virtual_env_all\common_py3\Scripts> python
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> input_list = [int(x.strip()) for x in input("enter list:").strip()[1:-1].split(",")]
enter list:[2,4,5]
>>> input_list
[2, 4, 5]
>>> type(input_list)
<class 'list'>
>>>
0

essaye celui-là ,

n=int(raw_input("Enter length of the list"))
l1=[]
for i in range(n):
    a=raw_input()
    if(a.isdigit()):
        l1.insert(i,float(a)) #statement1
    else:
        l1.insert(i,a)        #statement2

Si l'élément de la liste est juste un nombre, l'instruction 1 sera exécutée et s'il s'agit d'une chaîne, l'instruction 2 sera exécutée. À la fin, vous aurez une liste l1 selon vos besoins.

0
xarvier

Vous pouvez utiliser cette fonction (avec le type int uniquement);)

def raw_inputList(yourComment):
     listSTR=raw_input(yourComment)     
     listSTR =listSTR[1:len(listSTR)-1]
     listT = listSTR.split(",")
     listEnd=[]
     for caseListT in listT:
          listEnd.append(int(caseListT))
     return listEnd

Cette fonction retourne votre liste (avec le type int)!

Exemple :

yourList=raw_inputList("Enter Your List please :")

Si vous entrez

"[1,2,3]" 

ensuite

yourList=[1,2,3]          
0
WolfGangM