Python中的不同输出
我想删除字符串(“324a”包括在内),并在列表中只保留整数。这是代码Python中的不同输出,python,Python,我想删除字符串(“324a”包括在内),并在列表中只保留整数。这是代码 a = ["345", "sadas", "324a", "14", "john"] for i in a: try: if i == int(i): continue except ValueError: a.remove(i) print(
a = ["345", "sadas", "324a", "14", "john"]
for i in a:
try:
if i == int(i):
continue
except ValueError:
a.remove(i)
print(a)
使用此代码,输出为
['345', '324a', '14']
即使“324a”不是整数,并且代码应该返回ValueError,但代码仍然不会将其从列表中删除
下面是另一个简单代码,显示“324a”不是整数
a = "324a"
a = int(a)
print(a)
上述代码的输出
a = int(a)
ValueError: invalid literal for int() with base 10: '324a'
提前感谢您的回答 这与您在遍历列表时对列表进行变异有关 查看下面的代码并查看打印的索引…删除索引1处的
sadas
,现在索引1处保留324a
,但循环无法识别值更改,因此在迭代过程中不会重复索引1两次
for idx, i in enumerate(a):
print(idx)
try:
if i == int(i):
continue
except ValueError:
a.remove(i)
print(a)
试一试-
这与您在遍历列表时对列表进行变异有关 查看下面的代码并查看打印的索引…删除索引1处的
sadas
,现在索引1处保留324a
,但循环无法识别值更改,因此在迭代过程中不会重复索引1两次
for idx, i in enumerate(a):
print(idx)
try:
if i == int(i):
continue
except ValueError:
a.remove(i)
print(a)
试一试-
您不能在遍历列表时从列表中删除项目。另外,当
i
是str
时,以下语句将是False
:i==int(i)
我建议改用这个:
a = ["345", "sadas", "324a", "14", "john"]
tempList = []
for i in a:
try:
int(i)
tempList.append(i) # if int(i) fails, this line won't be reached
except ValueError:
pass
a = tempList[:] # we use [:] to copy the list
print(a)
或者这一行:
a = ["345", "sadas", "324a", "14", "john"]
print([int(x) for x in a if x.isdigit()])
您不能在遍历列表时从列表中删除项目。另外,当
i
是str
时,以下语句将是False
:i==int(i)
我建议改用这个:
a = ["345", "sadas", "324a", "14", "john"]
tempList = []
for i in a:
try:
int(i)
tempList.append(i) # if int(i) fails, this line won't be reached
except ValueError:
pass
a = tempList[:] # we use [:] to copy the list
print(a)
或者这一行:
a = ["345", "sadas", "324a", "14", "john"]
print([int(x) for x in a if x.isdigit()])
不要修改正在迭代的列表。创建一个新的,如下所示:
a = list(filter(None, map(lambda x: x if x.isdigit() else None, a)))
a = [word for word in a if word.isdigit()]
编辑:从评论中,我们可以直接使用str.isdigit
和过滤器
a = list(filter(str.isdigit, a)))
不要修改正在迭代的列表。创建一个新的,如下所示:
a = list(filter(None, map(lambda x: x if x.isdigit() else None, a)))
a = [word for word in a if word.isdigit()]
编辑:从评论中,我们可以直接使用str.isdigit
和过滤器
a = list(filter(str.isdigit, a)))
您可以使用如下简单的列表理解:
a = list(filter(None, map(lambda x: x if x.isdigit() else None, a)))
a = [word for word in a if word.isdigit()]
这将创建一个包含所有数字的列表。您可以使用如下简单的列表理解:
a = list(filter(None, map(lambda x: x if x.isdigit() else None, a)))
a = [word for word in a if word.isdigit()]
这将创建一个包含所有数字的列表。顺便说一句,整个if语句是不需要的,也没有真正意义。您可以使用
int(i)
。另外,欢迎使用SO!看看and.BTW,整个if语句是不需要的,也没有真正意义。您可以使用int(i)
。另外,欢迎使用SO!检查and。是的,在对列表进行迭代时从列表中删除会导致问题。谢谢你的澄清!是的,当在列表上迭代时从列表中删除会导致问题。谢谢你的澄清!我可以在迭代时从列表中删除项目,但这个过程会弄乱索引。原因如下:我可以在迭代时从列表中删除项,但这个过程会弄乱索引。原因如下:我喜欢这样,但有几点可以改进:1)使用else子句使try子句尽可能小。2) 函数名不要使用大写字母,请使用snake_大小写或至少使用小写字母。3) 当您可以直接测试函数结果时,isInt
是不必要的。4) 使用理解或过滤器而不是循环要简单一些。有了这些变化,谢谢@wjandreaNice!另外,我忘了提到,添加一个简短的代码工作原理解释会有帮助,比如一两句话。我喜欢这样,但有几点可以改进:1)使用else子句使try子句尽可能小。2) 函数名不要使用大写字母,请使用snake_大小写或至少使用小写字母。3) 当您可以直接测试函数结果时,isInt
是不必要的。4) 使用理解或过滤器而不是循环要简单一些。有了这些变化,谢谢@wjandreaNice!我还忘了提到,添加一个简短的代码工作原理解释会有帮助,比如一两句话。说list(filter(str.isdigit,a))
是的,filter
当然可以直接接受str.isdigit
作为参数。谢谢要说list(filter(str.isdigit,a))
是的,filter
当然可以直接接受str.isdigit
作为它的参数。谢谢