Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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 - Fatal编程技术网

转换元组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:所以,放弃我的例子;这里有一个更好的:上标1
u'ª'.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:所以,放弃我的例子;这里有一个更好的:上标1
u'ª'.isdigit()
在3.3中保证为真,并且至少在我所掌握的所有2.7版本中都是真的,但是
int(u'ª')
在所有版本中都会引发
ValueError
。我发现最后一个选项是最好的,并将所有内容都转换了。许多感谢信都假定数字字段的位置是固定的。如果这是真的,这可能是最明确的答案,但OP从未说过这是真的,如果是真的,可能最好首先使用
命名的tuple
或类,而不是
tuple
。我发现最后一个选项是最好的,并将所有内容都转换了。许多感谢信都假定数字字段的位置是固定的。如果这是真的,这可能是最明确的答案,但OP从未说过这是真的,如果是真的,可能最好首先使用
命名的tuple
或类,而不是
tuple