Python 如何将字符串拆分为奇数序列?
我试图找到一种方法,将一个数字拆分为奇数序列:Python 如何将字符串拆分为奇数序列?,python,string,Python,String,我试图找到一种方法,将一个数字拆分为奇数序列: num = "57483795478973" for digit in num: if int(digit)%2==0: list_a = str.split(num,digit) print (list_a) 但我得到的结果是 ['574', '379547', '973'] 其中包括偶数,我不明白我做错了什么。你每次都在计算列表a。循环的最后一次('8')给出您看到的结果。您想要的是在“0”、“2”、“4”和“6
num = "57483795478973"
for digit in num:
if int(digit)%2==0:
list_a = str.split(num,digit)
print (list_a)
但我得到的结果是
['574', '379547', '973']
其中包括偶数,我不明白我做错了什么。你每次都在计算
列表a
。循环的最后一次('8')给出您看到的结果。您想要的是在“0”、“2”、“4”和“6”以及“8”上进行拆分。您每次通过循环都在计算列表a
。循环的最后一次('8')给出您看到的结果。您需要的是在“0”、“2”、“4”和“6”以及“8”上拆分。以下是使用该模块的解决方案:
在本例中,第一个参数实际上是一个分隔符列表——在您的案例中是偶数。如果要跳过空结果:
>>>[r for r in re.split('[02468]', '57483795478973') if r]
['57', '3795', '7', '973']
下面是一种手动计算的方法,使用: 用法示例:
>>> list(splitToOddSeqs('57483795478973'))
['57', '3795', '7', '973']
以下是使用模块的解决方案: 在本例中,第一个参数实际上是一个分隔符列表——在您的案例中是偶数。如果要跳过空结果:
>>>[r for r in re.split('[02468]', '57483795478973') if r]
['57', '3795', '7', '973']
下面是一种手动计算的方法,使用: 用法示例:
>>> list(splitToOddSeqs('57483795478973'))
['57', '3795', '7', '973']
除了其他好的答案,您可以使用<代码>迭代器.GROPBB(如果考虑性能的话)很好:
除了其他好的答案,您可以使用<代码>迭代器.GROPBB(如果考虑性能的话)很好:
听起来你想要的结果是:
['57', '3795', '7', '973']
但是在循环的每次迭代中,您都会用最新的str.split(num,digit)
替换list\u a
。由于8
是num
中的最后一个偶数,因此list_a
的最终值是str.split(num,'8')
——一个仅在8上拆分的字符串
反复通过split
传递输出也不起作用,因为在第一次split
之后,您使用的是字符串列表,而不是单个字符串
我很惊讶Python没有提供一个在任何字符集上拆分的库函数。看来你得自己写了
此外,您的代码通过在num
中的数字上循环而不是在所有偶数数字上循环一次来完成额外的工作。如果num
很长,那么最终会在同一个数字上反复拆分,浪费精力
我写了一个不太像python的、更像C的答案,但我喜欢使用regex、
itertools和生成器的答案。听起来你想要的结果是:
['57', '3795', '7', '973']
但是在循环的每次迭代中,您都会用最新的str.split(num,digit)
替换list\u a
。由于8
是num
中的最后一个偶数,因此list_a
的最终值是str.split(num,'8')
——一个仅在8上拆分的字符串
反复通过split
传递输出也不起作用,因为在第一次split
之后,您使用的是字符串列表,而不是单个字符串
我很惊讶Python没有提供一个在任何字符集上拆分的库函数。看来你得自己写了
此外,您的代码通过在num
中的数字上循环而不是在所有偶数数字上循环一次来完成额外的工作。如果num
很长,那么最终会在同一个数字上反复拆分,浪费精力
我写了一个不太像Pythonic,更像C的答案,但我更喜欢使用regex,itertools
和生成器的答案。你想要输出['57',3795',7',973']
?你想要输出['57',3795',7',973']
?我更喜欢这个答案,当它只是re.split的时候。首先,生成器是一种完全不同的方法(因此从技术上讲,它应该是自己的独立答案);其次,对于Python初学者来说,它更冗长,而且(我认为)更难理解。@JohnY我认为正则表达式对于初学者来说是一件很难理解的事情,这就是为什么我添加了第二个版本。我同意你的观点,生成器也不是一个简单的概念,但我认为显示如何计算部分结果具有一定的教育价值。也许我会补充一些意见。我完全同意你的观点,正则表达式对初学者来说也很难。但在这种特殊情况下,他们需要掌握的唯一一件事是[02468]
是一组字符,并且re.split()
将对该组中的任何字符进行分割。因此,它实际上是内置字符串方法split()
和strip()
(使用后者的参数语义)之间的交叉。谢谢!这解决了我的问题,帮助我完成了剩下的练习。。。。(查找最长的序列是什么,以及从字符串的哪个索引开始)。再次感谢[:当我只是re.split()
时,我更喜欢这个答案。首先,生成器是一种完全不同的方法(因此从技术上讲,它应该是它自己的单独答案);其次,它更详细,而且(我认为)Python初学者更难理解。@JohnY我认为regexp对初学者来说很难理解,这就是我添加第二个版本的原因。我同意你的观点,生成器也不是一个简单的概念,但我认为显示部分结果是如何计算的有一定的教育价值。也许我会添加一些注释。我不这么认为当然,正则表达式对初学者来说也很难。但在这种特殊情况下,他们需要掌握的唯一一件事是[02468]
是一组字符,并且re.split()
将拆分集中的任何内容。因此,它实际上是内置字符串方法split()之间的交叉
和strip()
(带有后者的参数语义