Есть список кортежей, например:
t = [('c','3'),('e','11'),('b','10'),('a','1')]
Каждый кортеж состоит из элементов string. Нужно сделать так, чтобы цифры были не типа string, а integer. Т.к. элементы кортежа нельзя изменить, то просто каждый кортеж меняю на другой:
for elem in t:
elem = (elem[0],) + (int(elem[1]),)
Затем делаю проверку:
for elem in t:
print elem, type(elem[0]), type(elem[1])
Ее вывод показывает, что string не меняется на integer. Вот полный текст программы:
t = [('c','3'),('e','11'),('b','10'),('a','1')]
for elem in t:
elem = (elem[0],) + (int(elem[1]),)
for elem in t:
print elem, type(elem[0]), type(elem[1])
А вот ее вывод:
('c', '3') <type 'str'> <type 'str'>
('e', '11') <type 'str'> <type 'str'>
('b', '10') <type 'str'> <type 'str'>
('a', '1') <type 'str'> <type 'str'>
Интересно то, что если все это делать в интерактивном режиме для одной строчки (без цикла), то все работает так, как и ожидалось (видно, что единица получается без кавычек):
>>> elem = ('a', '1')
>>> elem = (elem[0],) + (int(elem[1]),)
>>> elem
('a', 1)
>>>
Что это означает или где я ошибаюсь?
PS. Вообще-то все это нужно для того, чтобы отсортировать список методом sorted() так, чтобы числа сортировались в порядке возрастания, т.е. чтобы после 1 было 2, а не 10, 11... 19, 2, 3...