Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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/1/typo3/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:为整数的每个数字加1_Python - Fatal编程技术网

Python:为整数的每个数字加1

Python:为整数的每个数字加1,python,Python,有更有效的方法吗?您在这里处理字符串,每个字符仍然是一个字符串,type(x)永远不会是int。你想要的是 改为使用列表: samples = list('SX00182') def add(x): if type(x) == int: return x + 1 new_sample = map(add, samples) result = ''.join(new_sample) 这里的表达式str((int(x)+1)%10)将您的字符强制转换为整数,如果结果为

有更有效的方法吗?

您在这里处理字符串,每个字符仍然是一个字符串,
type(x)
永远不会是
int
。你想要的是

改为使用列表:

samples = list('SX00182')

def add(x):
    if type(x) == int:
        return x + 1

new_sample = map(add, samples)

result = ''.join(new_sample)
这里的表达式
str((int(x)+1)%10)
将您的字符强制转换为整数,如果结果为10,则向
0添加1,“换行”,并再次将整个结果转换为字符串

您甚至不需要将
示例
转换为列表,这也适用于字符串:

new_sample = [x if not x.isdigit() else str((int(x) + 1) % 10) for x in samples]
完整代码:

>>> samples = 'SX00182'
>>> [x if not x.isdigit() else str((int(x) + 1) % 10) for x in samples]
['S', 'X', '1', '1', '2', '9', '3']
演示:


请注意,即使可以使用
type(x)=int
测试,也不应该以这种方式使用
type()。首先,类型最好用恒等式来测试(
type(x)是int
),而不是相等式,你可以用
isinstance(x,int)
来代替子类。

你在这里处理字符串,每个字符仍然是字符串,
type(x)
永远不会是
int
。你想要的是

改为使用列表:

samples = list('SX00182')

def add(x):
    if type(x) == int:
        return x + 1

new_sample = map(add, samples)

result = ''.join(new_sample)
这里的表达式
str((int(x)+1)%10)
将您的字符强制转换为整数,如果结果为10,则向
0添加1,“换行”,并再次将整个结果转换为字符串

您甚至不需要将
示例
转换为列表,这也适用于字符串:

new_sample = [x if not x.isdigit() else str((int(x) + 1) % 10) for x in samples]
完整代码:

>>> samples = 'SX00182'
>>> [x if not x.isdigit() else str((int(x) + 1) % 10) for x in samples]
['S', 'X', '1', '1', '2', '9', '3']
演示:

请注意,即使可以使用
type(x)=int
测试,也不应该以这种方式使用
type()。首先,类型的测试最好使用标识(
type(x)是int
),而不是相等,并且您应该使用
isinstance(x,int)
来代替子类。

通常在Python中,“更有效”意味着“做得更少”和“向下推它,以便任何循环都在较低级别上发生-在C中而不是在Python中循环”

由于您只有十个单字符映射(0:1、1:2等),因此绝对不需要检查它们是否为数字,将它们转换为整数,对它们进行数学计算,将答案模化以保持为一个数字,构建一个列表,将它们添加到列表中,然后将整个内容转换回字符串

取而代之的是,盲目地将它们替换为文本,然后,将其向下推到一个C库特性中,该特性为您提供了帮助。String.maketrans将左侧的文本字符映射到右侧的文本字符,然后String.translate使用翻译表替换文本字符

>>> def increment_digits(string):
...     return ''.join([x if not x.isdigit() else str((int(x) + 1) % 10) for x in string])
... 
>>> increment_digits('SX00182')
'SX11293'
>>> increment_digits('SX11293')
'SX22304'
一般来说,在Python中,“更高效”意味着“做得更少”和“将其向下推,以便任何循环都在较低的级别上发生——在C中循环而不是在Python中循环”

由于您只有十个单字符映射(0:1、1:2等),因此绝对不需要检查它们是否为数字,将它们转换为整数,对它们进行数学计算,将答案模化以保持为一个数字,构建一个列表,将它们添加到列表中,然后将整个内容转换回字符串

取而代之的是,盲目地将它们替换为文本,然后,将其向下推到一个C库特性中,该特性为您提供了帮助。String.maketrans将左侧的文本字符映射到右侧的文本字符,然后String.translate使用翻译表替换文本字符

>>> def increment_digits(string):
...     return ''.join([x if not x.isdigit() else str((int(x) + 1) % 10) for x in string])
... 
>>> increment_digits('SX00182')
'SX11293'
>>> increment_digits('SX11293')
'SX22304'

如果您有
9
,该怎么办?哦,好问题,应该转到0 Ithink@Ffisegydd:好的,由于OP第一次将整个字符串转换为单个字符的列表,让我们假设
SX11293
,作为
map()
会将
添加到该列表中的每个元素。如果有
9
该怎么办?哦,好问题,应该转到0 Ithink@Ffisegydd:好的,由于OP第一次将整个字符串转换为单个字符的列表,让我们假设
SX11293
,作为
map()
会将
添加
应用到该列表中的每个元素。我有几乎相同的解决方案,但又太慢了。唯一的区别是我更喜欢lambda(
increment=lambda x:str((int(x)+1)%10)
),这使得理解更具可读性:
print'。join(increment(char)if char.isdigit()else char for char for samples)
我有几乎相同的解决方案,但又太慢了。唯一的区别是我更喜欢lambda(
increment=lambda x:str((int(x)+1)%10)
),这使得理解更可读:
print'。连接(increment(char)if char.isdigit()else char for char in samples)