Получение "TypeError: объект" datetime.date "не является итерируемым" при повторении кортежа (преобразование кортежа в список)

120
19

У меня есть следующие кортежи, называемые data

data  = (
datetime.date(2015, 9, 11),
datetime.datetime(2015, 9, 11, 12, 55, 24),
'BB',
'ABC',
)

Он состоит из date, datetime и времени и двух элементов str.

Преобразуя этот tuple в list, я пытаюсь повторить его следующим образом:

ls = []
for i in data:
ls.append(list(i))

Я получил следующую ошибку TypeError: 'datetime.date' object is not iterable.

Зачем?

спросил(а) 2021-01-19T19:13:39+03:00 6 месяцев назад
1
Решение
77

При использовании цикла for в Python каждый элемент вещи, который вы выполняете, привязывается к имени, которое вы используете в инструкции for. Итак, в вашем случае:

for i in data:
    i сначала связан с datetime.date(2015, 9, 11) i затем привязывается ко второму элементу datetime.datetime(2015, 9, 11, 55, 24) i затем привязывается к третьему элементу 'BB' i затем привязан к четвертому элементу 'ABC'

Так внутри вашей for цикла, когда вы говорите:

    ls.append(list(i))

вы пытаетесь создать список из каждого элемента - и вы не можете составить список с date или date и datetime.

Самый простой способ преобразовать тип вашей последовательности из tuple в list:

data = list(data)

ответил(а) 2021-01-19T19:13:39+03:00 6 месяцев назад
64

Вы выполняете итерацию через кортеж, но проблема заключается в list(i) который сам пытается выполнить итерацию через элемент i, преобразовывая элементы в список. Вы хотите:

ls = []
for i in data:
ls.append(i)

Или если по какой-то причине вы хотите, чтобы каждый элемент в своем списке:

ls = []
for i in data:
ls.append([i])

ответил(а) 2021-01-19T19:13:39+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема