Как изменить список гибридных типов на str - PullRequest
0 голосов
/ 31 октября 2018

У меня есть список типов гибридов:

A=[0, '0,1', 0, '0,1', '0,1', '0,1', '0,1', 0]

хочу поменять все на стр, но я пытаюсь

for i in A:
  if type(i) == int:
    str(i)
  print(type(i))

и ничего не изменится с этими типами

<class 'int'>
<class 'str'>
<class 'int'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'int'>

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

chr - это функция, которая возвращает новый одиночный символ str; если вы не назначите результат, это не опцион. Итак, самое простое исправление:

for i, x in enumerate(A):  # enumerate to get indices so we can assign back
    if type(x) is int:     # Type checks use is, not == (or use isinstance)
        A[i] = x = chr(x)  # Reassign x as well if you want to use the new value
    print(type(x))

Тем не менее, он не будет делать строку '0', он будет делать строку '\x00', потому что chr конвертирует на основе необработанных ординалов Unicode (ASCII ординалов на Py2). Если вы хотите произвести '0', используйте str вместо:

for i, x in enumerate(A):  # enumerate to get indices so we can assign back
    if type(x) is int:
        A[i] = x = str(x)
    print(type(x))
0 голосов
/ 31 октября 2018

Вам нужно переписать тип в третьей строке str(i) должно быть i = str(i),

A=[0, '0,1', 0, '0,1', '0,1', '0,1', '0,1', 0]

for i in A:
  if type(i) == int:
    i = str(i)
  print(type(i))


# output
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>

Обратите внимание, что это не изменит тип исходного списка. Для этого вам нужно перезаписать значение в самом списке,

for i in range(len(A)):
  if type(A[i]) == int:
    A[i] = str(A[i])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...