Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尽可能将字符串列表转换为整数_Python_Python 3.x_List - Fatal编程技术网

Python 尽可能将字符串列表转换为整数

Python 尽可能将字符串列表转换为整数,python,python-3.x,list,Python,Python 3.x,List,我在这里看到了各种各样的答案,但没有一个完全回答了我的问题。我正在尝试转换以下列表 list = ['A', '2', '8', 'B', '3'] 对下列事项: list = ['A', 2, 8, 'B', 3] 我希望将字符串保留为字符串,但尽可能将字符串转换为int 我知道我可以这样做: list = [int(i) for i in list] 如果只是数字,但我不确定混合时如何操作。您可以使用str.isdigit(): 考虑到负数: >>> l = ['A'

我在这里看到了各种各样的答案,但没有一个完全回答了我的问题。我正在尝试转换以下列表

list = ['A', '2', '8', 'B', '3']
对下列事项:

list = ['A', 2, 8, 'B', 3]
我希望将字符串保留为字符串,但尽可能将字符串转换为int

我知道我可以这样做:

list = [int(i) for i in list]

如果只是数字,但我不确定混合时如何操作。

您可以使用
str.isdigit()

考虑到负数:

>>> l = ['A', '2', '8', 'B', '-3']
>>> [int(x) if x.isdigit() or x.startswith('-') and x[1:].isdigit() else x for x in l]
>>> ['A', 2, 8, 'B', -3]

除了,总是有
尝试
/

oldlist = ['A', '2', '8', 'B', '3']
newlist = []
for x in oldlist:
    try:
        newlist.append(int(x))
    except ValueError:
        newlist.append(x)

newlist
# ['A', 2, 8, 'B', 3]

我只是将转换提取为一个函数

def int_if_possible(value):
    try:
        return int(value)
    except (ValueError, TypeError):
        return value

int_list = [int_if_possible(i) for i in int_list]

此外,我还将列表重命名为int_list,以便在需要时仍然可以使用列表构造函数。

您可以使用try,除了block

lst1 = ['A', '2', '8', 'B', '3']
lst2 = []
for i in lst1:
    try:
        lst2.append(int(i))
    except ValueError:
        lst2.append(i)

print lst2

最好不要像
list
@wds这样对保留名称进行阴影处理,这就是为什么您通常更喜欢模式而不是;尝试执行您想要执行的操作,并在异常失败时处理异常。不要试图编写解析器来预先检查您的条件(您每次都会错过一个边缘情况),只需这样做,并适当地处理故障
int()
知道如何解析,不要重新发明轮子。仅供参考,
int
还允许任意前导和尾随空格
int('-2')
是完全合法的,但将无法通过
isdigit
测试。一般来说,您可能需要执行
除了(ValueError,TypeError):
,这样您就不会吐出永远不能是
int
的类型(例如
列表
元组
,等等)。如果
列表
都是
str
ValueError
就可以了,但是如果它是混合类型,并且你只想转换
int
,比如
str
,而其他东西不动,那么处理
TypeError
就可以了。听起来很公平。这个问题只提到int或string,所以具体哪一个是合适的取决于实现者。不过我更新了我的答案,因为在这种情况下,它使函数更加灵活。
lst1 = ['A', '2', '8', 'B', '3']
lst2 = []
for i in lst1:
    try:
        lst2.append(int(i))
    except ValueError:
        lst2.append(i)

print lst2