0
votes

Comment prendre l'entrée en tant que sous-liste de l'utilisateur via une fonction d'entrée dans Python-3?

J'essaie de prendre des commentaires de l'utilisateur quelque chose comme ceci: [[1,2,3], 4, 5] . Dans lequel [1,2,3] dans la liste type et 4 et 5 in int type.

Comment puis-je le faire par méthode de saisie?

Voici mon code mais dans lequel tout est dans type de chaîne. xxx

sortie: -

Entrez votre liste: - 1,2, 3 4 5
['1,2,3', '4', '5']
classe 'str'
Classe 'str'


3 commentaires

Les entrées viennent toujours comme une chaîne. tycaire (aka convert) en intvestre ensuite. Par exemple, int ('123')


Utiliser in_list = ast.literal_eval (entrée ("Entrez votre liste: -") .Strip ())


ressemble à la bande littérale_eval () par défaut.


5 Réponses :


0
votes

Pour les entrées contenant des chiffres ou des listes, il tombe sur le programme de vérifier et de modifier la chaîne entrée par l'utilisateur pour obtenir le résultat souhaité.

pour une entrée fournie comme suit: 1,2,3 4 5 code> Comme indiqué dans l'exemple, vous pouvez modifier la chaîne et convertir en Int le long des lignes suivantes à l'aide des comprimés ou des cartes de liste. P>

in_list = input("Enter your list :- ").split()
print(in_list)

in_list[0] = [int(s) for s in in_list[0].split(',')] #split on comma, typecast to int, reassign to 0th index
in_list[1:] = [int(s) for s in in_list[1:]] #typecast remaining values to int

#Alternate syntax using map
#in_list[0] = list(map(int,in_list[0].split(',')))
#in_list[1:] = list(map(int, in_list[1:]))

print(in_list)
#Output:
[[1, 2, 3], 4, 5]


0 commentaires

0
votes

Vous pouvez utiliser eval : xxx


0 commentaires

0
votes

Un peu plus longtemps, mais c'est une autre option.

my_string code> est l'entrée de l'utilisateur, la méthode fonctionne également pour ce type d'entrée: P>

my_str = '1,2,3 4 5 7,8,9 10 11'

res = [ e.split(',') for e in my_str.split(' ') ]
for i, e in enumerate(res):
  if len(e) == 1:
    res[i] = int(e[0])
  else:
    res[i] = [ int(ee) for ee in e ]

print(res)
#=> [[1, 2, 3], 4, 5, [7, 8, 9], 10, 11]


0 commentaires

0
votes

Utiliser ast.literal_eval () (comme commenté Daniel Mesejo): xxx

sortie: xxx < p> En plus de ast.literal_eval () , un autre utilisateur a suggéré d'utiliser eval () , qui fonctionne également. Pour une discussion sur la raison pour laquelle il est plus sûr d'utiliser ast.literal_eval () , reportez-vous à cette question connexe: Utilisation de l'EVAL () VST.LITERAL_EVAL de Python ()? .

à partir du AST Documentation:

Ceci peut être utilisé pour évaluer en toute sécurité les chaînes contenant des valeurs de python provenant de sources non carteuses sans avoir besoin d'analyser les valeurs soi-même. Il n'est pas capable d'évaluer des expressions arbitrairement complexes, par exemple impliquant des opérateurs ou une indexation.


0 commentaires

0
votes
my_list=[]
temp_list=[]
n=int(input('Enter the size of list'))

for i in range(n):  #loop for number of sub-list in the list
    for j in range(0,2): #loop for number of elements in the sub-list
        temp_list.append(input())
    my_list.append(temp_list)
    temp_list=[] # to empty the list for next iteration

print(my_list)

0 commentaires