Как изменить типы данных в кортежах? - PullRequest
0 голосов
/ 23 апреля 2020

Я работаю со списком int и float, и пытаюсь изменить второй параметр на строку.

У меня есть что-то вроде этого:

array = [(12.0, 23),(9.0, 24)]

Что я хочу это:

array = [(12.0, '23'),(9.0, '24')]

Я пытался использовать простой for, как показано ниже:

for i in range(len(array)):
  array[i][1] == str(array[i][1]) 

Может кто-нибудь объяснить мне, почему это не работает, и если так, более простой способ сделай это? Большое спасибо!

Ответы [ 5 ]

2 голосов
/ 23 апреля 2020

Кортежи неизменны, поэтому вы не можете просто их поменять. Вам нужно сделать новые. Вероятно, проще всего с пониманием списка:

array = [(12.0, 23),(9.0, 24)]

array = [(a, str(b)) for a,b in array]
# [(12.0, '23'), (9.0, '24')]

Если вам нужно изменить список на месте, вы можете, но вам все еще нужны новые кортежи:

array = [(12.0, 23),(9.0, 24)]

for i, (a,b) in enumerate(array):
    array[i] = (a, str(b))

array
# (12.0, '23'), (9.0, '24')]
1 голос
/ 23 апреля 2020
>>> array = [(12.0, 23),(9.0, 24)]
>>> [(x[0],str(x[1])) for x in array]
[(12.0, '23'), (9.0, '24')]
>>>
0 голосов
/ 24 апреля 2020

Это потому, что списки изменчивы, однако кортежи неизменны. Неизменное значение, что они не могут быть изменены после того, как они были назначены. Также string, float, integer являются неизменными python структура данных. пожалуйста, обратитесь к ссылке ниже для получения дополнительной информации о различиях между списком и кортежем.

https://realpython.com/python-lists-tuples/

0 голосов
/ 24 апреля 2020

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

>>> array = [[12.0, 23], [9.0, 24]]
>>> for i in range(len(array)):
...     array[i][1] = str(array[i][1])
...
>>> array
[[12.0, '23'], [9.0, '24']]
>>>

Обратите внимание, однако, что поскольку вы обращаетесь к элементам с буквенными индексами ("[1]"), кортежи, вероятно, являются более семантически правильным типом для использования. Вам нужно сравнить это соображение с преимуществами изменяемости списков.

0 голосов
/ 23 апреля 2020
[tuple(map(str, xs)) for xs in lst]
[('12.0', '23',) , ('9.0', '24')]

result = []
    for xs in lst:
     temp = []
      for x in xs:
         temp.append(str(x))
      result.append(tuple(temp))



result

Кстати, кортежи - это то, что не может быть изменено, то есть неизменяемым

...