我有一个混合类型列表:
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'>
答案 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))