Python: цикл For добавляет только последний элемент количеством в len() раз
Простите за очередной нупский вопрос. Честно перечитал всё про цикл For, но самостоятельно что-то не усекаю, видимо. Нужно для каждого элемента поменять тип str на тип int.
#каждый элемент подсписков имеет тип str:
b = [['2018', '01', '12'], ['2018', '01', '15'], ['2018', '01', '16'], ['2018', '01', '17']]
d = []
f = []
#попытка для каждого элемента поменять тип str на int (успешная):
for i in range(len(b)):
list.clear(d)
d.append(int(b[i][0]))
d.append(int(b[i][1]))
d.append(int(b[i][2]))
print(d)
# print(d) выдаёт значения вида: [2018, 1, 12]
# [2018, 1, 15]
# [2018, 1, 16]
# [2018, 1, 17] (как раз такие мне нужны)
f.append(d) # то есть после каждого прохода цикла в d мы собираем список вида
#[2018, 1, 15], потом его отгружаем в список списков f.
print(len(f), f)
А вот в списке f получаются одинаковые значения:
[[2018, 1, 17], [2018, 1, 17], [2018, 1, 17], [2018, 1, 17], [2018, 1, 17]]
То есть вставляется последний элемент из списка b (но уже с типом int).
Код без моих комментариев:
b = [['2018', '01', '12'], ['2018', '01', '15'], ['2018', '01', '16'], ['2018', '01', '17']]
d = []
f = []
for i in range(len(b)):
list.clear(d)
d.append(int(b[i][0]))
d.append(int(b[i][1]))
d.append(int(b[i][2]))
print(d)
f.append(d)
print(len(f), f)
Вывод:
[2018, 1, 12]
[2018, 1, 15]
[2018, 1, 16]
[2018, 1, 17]
[[2018, 1, 17], [2018, 1, 17], [2018, 1, 17], [2018, 1, 17], [2018, 1, 17]]
Ответы (2 шт):
Автор решения: AndroID
→ Ссылка
Можно использовать функцию map.
b = [['2018', '01', '12'], ['2018', '01', '15'], ['2018', '01', '16'], ['2018', '01', '17']]
def alltoint(enum):
for i in range(len(enum)) :
enum[i] = list(map(lambda x: int(x), enum[i]))
return enum
print(alltoint(b))
# [[2018, 1, 12], [2018, 1, 15], [2018, 1, 16], [2018, 1, 17]]