@Ornitier

Как изменить определённый элемент списка в цикле for?

У меня есть такой список:
votes = ['51,639', '51,480', '51,344', '51,267', '50,879', '50,532', '50,419', '50,250', '50,187', '50,139', '50,106', '50,064', '49,988', '49,906', '49,705', '49,641', '49,624', '49,385', '49,347', '49,221', '49,165', '49,085', '49,057', '49,043', '48,982', '48,641', '48,398', '48,347', '48,347', '48,214', '47,929', '47,830', '47,725', '47,688', '47,681', '47,678', '47,542', '47,532', '47,459', '47,392', '47,161', '47,153', '47,056', '47,046', '47,027', '46,926', '46,718', '46,679', '46,593', '46,569']


С помощью такого цикла я убираю из чисел запятую и вывожу цикл:
for vote in votes:
    x = vote.split(',')
    vote = x[0]+x[1]
    print(vote) # 51639, 51480, 51344, ...

print(votes) # ['51,639', '51,480', '51,344', '51,267', '50,879', '50,532', '50,419', '50,250', '50,187', '50,139', '50,106', '50,064', '49,988', '49,906', '49,705', '49,641', '49,624', '49,385', '49,347', '49,221', '49,165', '49,085', '49,057', '49,043', '48,982', '48,641', '48,398', '48,347', '48,347', '48,214', '47,929', '47,830', '47,725', '47,688', '47,681', '47,678', '47,542', '47,532', '47,459', '47,392', '47,161', '47,153', '47,056', '47,046', '47,027', '46,926', '46,718', '46,679', '46,593', '46,569']

Почему значения не меняются? Пробовал так же через индексацию, но выводилась ошибка, что индекс не может быть строкой.
for vote in votes:
    x = vote.split(',')
    votes[vote] = x[0]+x[1]
    print(vote)
  • Вопрос задан
  • 428 просмотров
Решения вопроса 1
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Ну и для коллекции самый кондовый способ
Надо, всё-таки, перед тем как использовать всякие enumerate, сначала понять как вообще работают циклы.
i=0
length = len(votes)
while i < length:
    votes[i] = votes[i].replace(',', '')
    i += 1
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Потому что ты не понимаешь итерацию по списку.
for vote in votes: означает, что переменной по имени vote поочерёдно будут присваиваться ссылки на значения элементов списка votes. ТОЧКА. Это не означает, что присвоив другое значение этой переменной, ты изменишь список. Присвоив что-то vote, ты заменишь ссылку внутри vote на другую, но и только.
Тем не менее, если само значение является изменяемым (например, это вложенный список или словарь), то его можно по этой ссылке изменить.

Во втором случае ты с какого-то перепугу решил, что индексы списка - это его значения. Индексы - это индексы. Числа от нуля до N-1, где N - длина списка. Так что для модификации списка нужно знать индекс элемента.
for index in range(len(votes)):
    vote = votes[index]
    x = vote.split(',')
    votes[index] = x[0]+x[1]

Или вот так:
for index, vote in enumerate(votes):
    x = vote.split(',')
    votes[index] = x[0]+x[1]
Ответ написан
@denislysenko
data engineer
Пробуй так:
votes = ['51,639', '51,480', '51,344', '51,267', '50,879', '50,532', '50,419', '50,250', '50,187', '50,139', '50,106', '50,064', '49,988', '49,906', '49,705', '49,641', '49,624', '49,385', '49,347', '49,221', '49,165', '49,085', '49,057', '49,043', '48,982', '48,641', '48,398', '48,347', '48,347', '48,214', '47,929', '47,830', '47,725', '47,688', '47,681', '47,678', '47,542', '47,532', '47,459', '47,392', '47,161', '47,153', '47,056', '47,046', '47,027', '46,926', '46,718', '46,679', '46,593', '46,569']

for index in range(len(votes)):
    x = votes[index].split(',')
    votes[index]=x[0]+x[1]

print(votes) # ['51639', '51480', '51344', '51267', '50879', '50532', '50419', '50250', '50187', '50139', '50106', '50064', '49988', '49906', '49705', '49641', '49624', '49385', '49347', '49221', '49165', '49085', '49057', '49043', '48982', '48641', '48398', '48347', '48347', '48214', '47929', '47830', '47725', '47688', '47681', '47678', '47542', '47532', '47459', '47392', '47161', '47153', '47056', '47046', '47027', '46926', '46718', '46679', '46593', '46569']
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы