如何将混合类型列表更改为str

时间:2018-10-31 02:36:08

标签: python python-3.x list

我有一个混合类型列表:

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

想将所有内容更改为str,但我尝试

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 :(得分:1)

您需要覆盖第三行中的类型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])

答案 1 :(得分:1)

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常规(Py2上的ASCII常规)进行转换的。如果您想产生'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))