转换元组Python中的项
如果我有以下元组:转换元组Python中的项,python,Python,如果我有以下元组: ("200", "Harry", "50000", "Dog", "jumbo"),("200", "Harry", "50000", "Dog", "jumbo"), ("200", "Harry", "50000", "Dog", "jumbo") 我想把所有的字符串数字转换成整数,这样我就可以正确地格式化整数,并进行计算,这样我就可以比较元组列表,而不是彼此比较。例如,打印名为“harry”的元组,我该怎么做?我的变量包含几个元组,所有元组都有不同的信息,所以我
("200", "Harry", "50000", "Dog", "jumbo"),("200", "Harry", "50000", "Dog", "jumbo"), ("200", "Harry", "50000", "Dog", "jumbo")
我想把所有的字符串数字转换成整数,这样我就可以正确地格式化整数,并进行计算,这样我就可以比较元组列表,而不是彼此比较。例如,打印名为“harry”的元组,我该怎么做?我的变量包含几个元组,所有元组都有不同的信息,所以我使用for循环来迭代并单独打印它们,但这是我所能做到的 您可以执行以下操作:
result = []
data = [("200", "Harry", "50000", "Dog", "jumbo"),("200", "Harry", "50000", "Dog", "jumbo"), ("200", "Harry", "50000", "Dog", "jumbo")]
for item in data:
result.append((int(item[0]), item[1], int(item[2]), item[3], item[4]))
甚至:
result = [((int(item[0]), item[1], int(item[2]), item[3], item[4])) for item in data]
这将使用整数而不是字符串创建新的元组(因为元组是不可变的)
要查找所有带有“Harry”
的元组,您可以检查项[1]=“Harry”
是否可以执行以下操作:
result = []
data = [("200", "Harry", "50000", "Dog", "jumbo"),("200", "Harry", "50000", "Dog", "jumbo"), ("200", "Harry", "50000", "Dog", "jumbo")]
for item in data:
result.append((int(item[0]), item[1], int(item[2]), item[3], item[4]))
甚至:
result = [((int(item[0]), item[1], int(item[2]), item[3], item[4])) for item in data]
这将使用整数而不是字符串创建新的元组(因为元组是不可变的)
要查找带有“Harry”
的所有元组,您可以检查项[1]==“Harry”
是否将所有字符串数字转换为整数:
要找到哈利:
如果名称的位置固定(第二项):
如果位置不固定:
>>> [t for t in all_tuples if 'Harry' in t]
[('200', 'Harry', '50000', 'Dog', 'jumbo')]
要将所有字符串数字转换为整数,请执行以下操作:
要找到哈利:
如果名称的位置固定(第二项):
如果位置不固定:
>>> [t for t in all_tuples if 'Harry' in t]
[('200', 'Harry', '50000', 'Dog', 'jumbo')]
我会用像这样的东西
def safe_int(v):
try:
return int(v)
except ValueError:
return v
这样:
>>> tup = ("200", "Harry", "50000", "Dog", "jumbo")
>>> tuple(map(safe_int, tup))
(200, 'Harry', 50000, 'Dog', 'jumbo')
我会用像这样的东西
def safe_int(v):
try:
return int(v)
except ValueError:
return v
这样:
>>> tup = ("200", "Harry", "50000", "Dog", "jumbo")
>>> tuple(map(safe_int, tup))
(200, 'Harry', 50000, 'Dog', 'jumbo')
数字的位置是固定的吗?或者它们可以出现在元组中的任何位置?数字的位置是固定的?或者它们可以出现在元组中的任何位置?只有当元组不能包含负数或带符号的数字时,这才有效。@Bakuriu,谢谢您的评论。
tuple((int(x)if x.lstrip('-+').isdigit()else x)for x in a_tuple)
?@falsetru:这很有效,但如果你不玩代码高尔夫,我认为爱子的答案是一种更干净的方式。(一方面,在Unicode世界中,不能保证isdigit
和“与int
一起工作”是相同的。例如,在Python2.7中,使用波斯语数字,u'£。isdigit()==False
,但是int('£')==1
)@abarner,谢谢您的评论。我同意你的观点,alko的版本是很好的选择。顺便说一句,u'£.isdigit()
在Python 2.7/3.3中为我提供了True
。看@falsetru:所以,放弃我的例子;这里有一个更好的:上标1u'ª'.isdigit()
在3.3中保证为真,并且至少在我所掌握的所有2.7版本中都是真的,但是int(u'ª')
在所有版本中都会引发ValueError
。这仅在元组不能包含负数或带符号的数字时才有效。@Bakuriu,谢谢您的评论。tuple((int(x)if x.lstrip('-+').isdigit()else x)for x in a_tuple)
?@falsetru:这很有效,但如果你不玩代码高尔夫,我认为爱子的答案是一种更干净的方式。(一方面,在Unicode世界中,不能保证isdigit
和“与int
一起工作”是相同的。例如,在Python2.7中,使用波斯语数字,u'£。isdigit()==False
,但是int('£')==1
)@abarner,谢谢您的评论。我同意你的观点,alko的版本是很好的选择。顺便说一句,u'£.isdigit()
在Python 2.7/3.3中为我提供了True
。看@falsetru:所以,放弃我的例子;这里有一个更好的:上标1u'ª'.isdigit()
在3.3中保证为真,并且至少在我所掌握的所有2.7版本中都是真的,但是int(u'ª')
在所有版本中都会引发ValueError
。我发现最后一个选项是最好的,并将所有内容都转换了。许多感谢信都假定数字字段的位置是固定的。如果这是真的,这可能是最明确的答案,但OP从未说过这是真的,如果是真的,可能最好首先使用命名的tuple
或类,而不是tuple
。我发现最后一个选项是最好的,并将所有内容都转换了。许多感谢信都假定数字字段的位置是固定的。如果这是真的,这可能是最明确的答案,但OP从未说过这是真的,如果是真的,可能最好首先使用命名的tuple
或类,而不是tuple
。