<p>因为当你这么做的时候:</p>
<pre><code>for ch in x:
for c in ch:
if c.isdigit() == True:
c = int(c) #yes it changed the type but it doesn't stroed in list
</code></pre>
<p>是的,您正在更改类型,但您在哪里存储更改的内容??你知道吗</p>
<p>为此,必须告诉列表在该索引处更改,为此,可以使用enumerate:</p>
<pre><code>item[index]=int(item1)
</code></pre>
<p>第二件事是在float上使用isdigit(),它将不起作用:</p>
<blockquote>
<p>str.isdigit() will only return true if all characters in the string
are digits. . and - are punctuation, not a digit.</p>
</blockquote>
<p>所以你可以试试这两种方法:</p>
<blockquote>
<p>First Method :</p>
</blockquote>
<pre><code>x = [['xy3'], ['-456'], ['True', '4.5']]
for item in x:
if isinstance(item,list):
for index,item1 in enumerate(item):
if item1.replace("-","").isdigit():
item[index]=int(item1)
elif item1.replace(".","").isdigit():
item[index]=float(item1)
print(x)
</code></pre>
<p>输出:</p>
<pre><code>[['xy3'], [-456], ['True', 4.5]]
</code></pre>
<p>或者如果需要,可以将所有int转换为float:</p>
<pre><code>x = [['xy3'], ['-456'], ['True', '4.5']]
for item in x:
if isinstance(item,list):
for index,item1 in enumerate(item):
if item1.replace("-","").replace(".","").isdigit():
item[index]=float(item1)
print(x)
</code></pre>
<blockquote>
<p>Second Method:</p>
</blockquote>
<p>您可以定义自己的<code>isdigit()</code>函数:</p>
<pre><code>x = [['xy3'], ['-456'], ['True', '4.5']]
def isdigit(x):
try:
float(x)
return True
except ValueError:
pass
</code></pre>
<blockquote>
<p>Then one line solution :</p>
</blockquote>
<pre><code>print([[float(item1) if '.' in item1 else int(item1)] if isdigit(item1) else item1 for item in x if isinstance(item,list) for index,item1 in enumerate(item)])
</code></pre>
<blockquote>
<p>Detailed Solution:</p>
</blockquote>
<pre><code>for item in x:
if isinstance(item,list):
for index,item1 in enumerate(item):
if isdigit(item1)==True:
if '.' in item1:
item[index]=float(item1)
else:
item[index]=int(item1)
print(x)
</code></pre>
<p>输出:</p>
<pre><code>[['xy3'], [-456], ['True', 4.5]]
</code></pre>