Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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 如何将所有数字类型(整数、oct等)拆分为单个数字?_Python_Split_Integer_Octal - Fatal编程技术网

Python 如何将所有数字类型(整数、oct等)拆分为单个数字?

Python 如何将所有数字类型(整数、oct等)拆分为单个数字?,python,split,integer,octal,Python,Split,Integer,Octal,我正在尝试构建一个函数,该函数不仅处理整数,还处理八进制数。比如说, def solution(S): number = [int(i) for i in str(S)] print number solution(111025) solution(002110) solution(000002222) 产出: [1, 1, 1, 0, 2, 5] [1, 0, 9, 6] [1, 1, 7, 0] 如何使第二个和第三个数字成为[0,0,2,1,1,0]和[0,0,0,0,

我正在尝试构建一个函数,该函数不仅处理整数,还处理八进制数。比如说,

def solution(S):
    number = [int(i) for i in str(S)]
    print number

solution(111025)
solution(002110)
solution(000002222)
产出:

[1, 1, 1, 0, 2, 5]
[1, 0, 9, 6]
[1, 1, 7, 0]

如何使第二个和第三个数字成为[0,0,2,1,1,0]和[0,0,0,0,0,2,2,2]?

我认为没有办法做到这一点,至少在传递数字时是这样。假设您调用了
解决方案(1+2)
解决方案(somefcnReturningNumber())
。所有
知道的是其参数的最终解析值;据我所知,它没有办法反省它的确切名称


另一方面,如果您传入一个字符串,那么检查该字符串是否是数字的有效字符串表示形式并将其拆分为数字是很简单的。

我认为没有办法做到这一点,至少在传入数字时是这样。假设您调用了
解决方案(1+2)
解决方案(somefcnReturningNumber())
。所有
知道的是其参数的最终解析值;据我所知,它没有办法反省它的确切名称


另一方面,如果您传入一个字符串,那么检查该字符串是否是数字的有效字符串表示形式并将其拆分为数字就很简单了。

如前所述,这基本上是不可能的(*)。您必须修改解释器,它已经将代码转换为值。例如:

>>> 0x0010 is 000020 is 16  # (**)
True
>>> 0x0010 is 0x00000000000010  # (**)
True
>>> type(1) == type(01) == type(0x1) == type(int)
True
(*)通过使用
inspect.getsourcelines(number)
,您可以区分这是否是从源文件(例如
numbers.py
)解释的,但此时您的方向确实是错误的


(**)注意,在上面我们滥用了python为
-5
256
之间的整数存储单例的事实,因此
is
比较显示内部表示中的值是相同的(实际上是指向相同值的指针)。在实际使用中,
==
是潜在非单例值(如数字)的正确比较。

如前所述,这基本上是不可能的(*)。您必须修改解释器,它已经将代码转换为值。例如:

>>> 0x0010 is 000020 is 16  # (**)
True
>>> 0x0010 is 0x00000000000010  # (**)
True
>>> type(1) == type(01) == type(0x1) == type(int)
True
(*)通过使用
inspect.getsourcelines(number)
,您可以区分这是否是从源文件(例如
numbers.py
)解释的,但此时您的方向确实是错误的


(**)注意,在上面我们滥用了python为
-5
256
之间的整数存储单例的事实,因此
is
比较显示内部表示中的值是相同的(实际上是指向相同值的指针)。在实际使用中,
==
是否正确比较可能的非单例值,如数字。

能否向函数中添加
base
参数?从代码的角度来看,八进制文字与具有相同值的十进制文字是无法区分的(它们都是
int
s或
long
s),因此您需要第二个数据源来传递基数。在solution()方法中,您输入的内容,你可以把它当作一根弦……@ShadowRanger是最明智的解决方案;虽然即使添加了一个基数,仍然无法实现OP中的第二个和第三个示例,而不传入另一个参数,即使用了多少个零来填充数字。您可以向函数添加
base
参数吗?从代码的角度来看,八进制文字与具有相同值的十进制文字是无法区分的(它们都是
int
s或
long
s),因此您需要第二个数据源来传递基数。在solution()方法中,您输入的内容,你可以把它当作一根弦……@ShadowRanger是最明智的解决方案;尽管添加了一个基数,但如果不输入另一个参数,即用多少个零来填充数字,仍然无法实现OP中的第二个和第三个示例。注意:在这里使用
is
测试有点误导;小int缓存意味着您检查的值实际上是单例的,事实上,在同一行上测试文本意味着您使用相同的对象(字节码编译器会重复本地常量)。但是测试
x=1000
x+=1
x为1001
将得到
False
。你应该使用平等测试,而不是身份测试,以避免误导性的例子。我知道
-5
256
的神奇单例,但在这种情况下,我真的想使用
is
,因为很多东西都是相等的(
1.0==1
),但是
is
提供了一个有用的不可区分性度量。我将在答案中添加另一个警告。注意:在这里使用
is
测试有点误导;小int缓存意味着您检查的值实际上是单例的,事实上,在同一行上测试文本意味着您使用相同的对象(字节码编译器会重复本地常量)。但是测试
x=1000
x+=1
x为1001
将得到
False
。你应该使用平等测试,而不是身份测试,以避免误导性的例子。我知道
-5
256
的神奇单例,但在这种情况下,我真的想使用
is
,因为很多东西都是相等的(
1.0==1
),但是
is
提供了一个有用的不可区分性度量。我将在回答中补充另一个警告。