【问题标题】:How to manipulate digits within an integer/string?如何操作整数/字符串中的数字?
【发布时间】:2011-10-26 18:02:14
【问题描述】:

我正在寻找一种通用方法来引用整数或字符串中的特定数字,我需要能够对交替数字执行不同的操作并对所有这些返回值的结果求和。

非常感谢任何帮助

哦,我是一个完整的初学者,所以我们将不胜感激。

我会详细说明,Python 上是否有任何内置函数可以将整数减少为数字列表,我看了无济于事,我希望这里有人能理解我的要求,抱歉这么含糊但我对 Python 的了解还不够,无法提供一个非常深入的问题。

【问题讨论】:

  • 详细?一个示例输入和所需的输出将是一个开始。
  • 问题含糊不清,显示零研究工作,并要求受访者完成 100% 的工作,而不是提供相关指针。
  • 基本上我需要能够将诸如 is_legal("1003998484") 之类的字符串分解为包含该数字的数字的列表,例如L = [1,0,0,3,9,9,8,4,8,4] 所以我可以使用步幅和索引对每个其他数字执行操作,例如每隔一个数字加 3,然后我需要能够对我返回的所有数字求和。
  • R.E. Raymond Hettinger,我不需要整个代码这个,不知道从哪里开始。
  • @George Burrows:问简单的问题没有问题。为了您的利益,我已经发布了链接。如果您不阅读本教程(或至少浏览一下以了解其中的内容),您将不断被琐碎的事情所困扰,例如不知道字符串是 Python 中的序列。

标签: python string integer digits


【解决方案1】:

如果你以整数开头,首先将其转换为字符串;您不能方便地解决整数中的数字:

>>> myint = 979
>>> mystr = str(myint)
>>> mystr
'979'

使用方括号中的索引来寻址单个数字,从零开始:

>>> mystr[1]
'7'

如果您需要对它们进行数学运算,请将这些数字转换回整数:

>>> int(mystr[1])
7

如果你只是做一个数字求和,列表推导很方便:

>>> sum( [ int(x) for x in mystr ] )
25

请记住,当您考虑单个数字时,您使用的是字符串,而当您进行算术时,您使用的是整数,所以这种事情需要大量的转换回来和第四次。

【讨论】:

  • 非常感谢,我不知道您可以像引用列表中的项目一样引用诸如 mystr 之类的项目,也感谢您的基本解释。 :)
  • 您可以将[] 放在sum() 中(使用geneexpr 而不是listcomp)。
  • 在这种情况下是否可以使用相同的开始、停止、步幅格式?还是保留给列表? IE。如果我想打印整数 list1 = 0123456789 末尾的交替数字,我可以打印 list1[-1::2] 以返回 8、6、4、2、0?
  • @GeorgeBurrows - 列表、元组和字符串都是序列。字符串序列的元素是每一个字符的字符串。当您想从字符串中挑选字符时,这非常棒,当您不小心将字符串传递给需要列表的函数时,这会令人困惑。
  • 0123456789 没有引号是一个整数,而不是一个字符串,前导零使它成为八进制,而不是十进制,所以这是一个问题。而且您的开始-停止-步幅数字是错误的,但'0123456789'[-2::-2]'86420'。尝试启动一个 python shell(只需在命令行输入python)并自己进行实验。
【解决方案2】:

仅将字符串转换为数字列表:

digits = [int(x) for x in mystr]

列表是可变的,因此您可以通过这种方式修改单个数字。

转换回字符串(假设所有数字都是个位数):

''.join([str(x) for x in digits])

您可以在切片中使用 strides 来处理交替数字

digits[::2]
digits[1::2]

【讨论】:

  • 这可能是因为我是新来的,但是要以这种方式引用 mystr 是否必须显式放置 mystr = '47833893949' 或者如果定义了字符串,您可以将其称为 mystr作为 mystr('47833893949')?感谢您的帮助:)
  • 这假定mystr 是数字的字符串表示形式。如果你有一个整数,str(mynumber) 会给你字符串表示。我不知道“如果它被定义为 mystr('47833893949')”是什么意思;那不是变量定义,那是函数调用。
  • 我必须定义一个函数来检查一个字符串输入是否符合某些条件,并且该函数必须定义为:is_true(n) 其中n是字符串,我需要将n更改为整数,据我所知,这将涉及使用例如 integer = int(n) 并且我必须再次输入 n,当函数应该能够只输入一次数字然后它应该能够执行n 上的所有操作都不需要任何额外的输入。所以理想情况下,我会在第一次输入 n,然后如果 n 符合这些标准,它会给我一个真假的答案。
【解决方案3】:

我不会声称这是最佳答案,但它符合您的要求:

In [1]: x = 1003998484

In [2]: [int(y) for y in str(x)]
Out[2]: [1, 0, 0, 3, 9, 9, 8, 4, 8, 4]

或者,如果您的输入已经是一个字符串,您可以省略 str() 演员表:

In [1]: x = '482898477382'

In [2]: [int(y) for y in x]
Out[2]: [4, 8, 2, 8, 9, 8, 4, 7, 7, 3, 8, 2]

从那里您可以根据需要修改结果列表...

【讨论】:

  • 如果我有这种格式的输入,你会如何建议应用这个?: test_num('482898477382') ?现在我不能简单地引用字符串而不再次输入字符串并沿着 input = '482898477382' 的行放置一些东西?
  • 如果您的输入是一个字符串,您可以省略str() 调用并将其截断为[int(y) for y in x]。我会用一个例子来更新我的答案。
  • 抱歉,我的问题措辞有点尴尬,如果将字符串定义为 test('12345'),我可以将字符串 '12345' 简单地称为测试吗?那么要将字符串 '12345' 转换为整数,我可以简单地输入 integer = int(test)?
  • test('12345') 会尝试使用参数“12345”调用函数test()。要创建一个变量,您可以使用 test = '12345' 然后,是的,您可以使用 asInt = int(test)
猜你喜欢
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 2023-04-07
相关资源
最近更新 更多