Как преобразовать список строк в список целых в Python 3x - PullRequest
2 голосов
/ 17 марта 2019

Я пытаюсь преобразовать список чисел в строковом формате в целые числа.

Я пытался понять список: marks = [int(x) for x in marks], и я также пытался сопоставить: new_list = list(map(int, marks)), но оба они приводят к TypeError:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

Полный код:

size = int(input())
students_and_marks = []
students = []
marks = []

for x in range((size * 2)):
    students_and_marks.append(input())

for x in range(1):
    students.append(students_and_marks[0::2])
    marks.append(students_and_marks[1::2])

new_list = list(map(int, marks))

Ответы [ 2 ]

2 голосов
/ 17 марта 2019

Оба ваших примера кода верны.Если вы хотите применить функцию к списку, вы можете использовать понимание списка или передать карту в конструктор списка, хотя понимание списка предпочтительнее.

Проблема связана с вводом.В частности,

marks.append(students_and_marks[1::2])

Рассмотрим,

>>> a = [1,2,3,4,5]
>>> a[1::2]
[2, 4]

Из вашего вопроса не ясно, что вы намеревались делать со своим слайсом, т.е. students_and_marks[1::2].Вы добавляете его к marks, хотя students_and_marks[1::2] уже является списком.

То, что вы сделали, было

>>> marks = ['1', '2']
>>> nested_marks = []
>>> nested_marks.append(marks)
>>> nested_marks
[['10', '9']]
>>> int(nested_marks)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

Хотя я полагаю, что вы намеревались это сделать,

>>> students_and_marks = ['Linus', '10', 'David', '9']
>>> students = students_and_marks[::2]
>>> students
['Linus', 'David']
>>> marks = students_and_marks[1::2]
>>> marks
['10', '9']
>>> new_marks = [int(mark) for mark in marks]
>>> new_marks
[10, 9]
0 голосов
/ 17 марта 2019

Замените оба метода append() во 2-м цикле на extend(), и все готово.

Примечание: Стратегия, которой вы следуете, хороша, если выНачинающий, в противном случае, существуют лучшие способы сделать то же самое в простом и с меньшим количеством кода (время / пространство эффективно).

Наконец, ваш код будет выглядеть так:

size = int(input())
students_and_marks = []
students = []
marks = []

for x in range((size * 2)):
    students_and_marks.append(input())

print(students_and_marks)
for x in range(1):
    students.extend(students_and_marks[0::2])
    marks.extend(students_and_marks[1::2])

print(marks)                     # ['R A', '2', 'K T', '4', 'P K', '6']
new_list = list(map(int, marks)) # ['2', '4', '6']
print(new_list)                  # [2, 4, 6]

Терминал ввода и вывода

Rishikeshs-MacBook-Air:PythonCode hygull$ python3 stk_prob_str.py 
3
R A
2
K T
4
P K
6
['R A', '2', 'K T', '4', 'P K', '6']
['2', '4', '6']
[2, 4, 6]
...