根据列表中的项目合并列表的某些部分 - Python
我想根据是否存在逗号合并列表的某些部分。如果我使用用户输入:"1231,fdkgjdkfj45,294d"
,我希望将其转换为["1231", "45", "294"]
。我可以删除列表中不是数字的所有内容(使用列表理解),但我希望程序识别逗号的位置,然后将逗号前的列表中的项目合并在一起(直到前一个逗号)。根据列表中的项目合并列表的某些部分 - Python
我明白我还没有措辞这个惊人的,但我认为你应该能够明白我的意思。
我觉得是必要的步骤如下:
在不是数字或逗号列表中删除所有内容(这样做了,使用另一个列表,列表理解)
检查对方是否有逗号,然后删除重复项。 (我应该能够很容易地做到这一点)
使用“for”循环来检查列表中的位置,并且在查找逗号时,合并列表中的所有项目,直到此逗号为止前面的逗号在一起。 (这是我不能做的)
任何反应将不胜感激。
您可以在','
字符的split
列表中,然后遍历每个子列表和join
的数字字符。
>>> s = "1231,fdkgjdkfj45,294d"
>>> [''.join(i for i in chunk if i.isdigit()) for chunk in s.split(',')]
['1231', '45', '294']
如果您还不熟悉列表理解(这是如上图所示),在这里是一个多走一步一步的解决方案,它大约相当于
numList = []
for chunk in s.split(','):
digits = []
for char in chunk:
if char.isdigit():
digits.append(char)
numList.append(''.join(digits))
>>> numList
['1231', '45', '294']
感谢你的这一点,在不需要实现其他模块的情况下,这更符合我的水平。 – Shaney96 2014-11-22 14:09:16
@ Shaney96:正则表达式(正则表达式)是强大的,_definitely_值得了解。大多数脚本语言都有某种形式的正则表达式支持,虽然语法有一些变化,但是一旦你用一种语言掌握了它们,你就可以在其他语言中使用它们。不过,我觉得使用正则表达式对于你的问题可能是过度的,我倾向于使用Cyber的答案中使用的方法。 – 2014-11-22 14:34:04
我会同意这一点,我目前正在做我的A2级计算课程,显然还在学习很多关于这门语言的知识,并且花费很多:) – Shaney96 2014-11-22 14:51:12
你只需要正则表达式。
>>> import re
>>> str_="1231,fdkgjdkfj45,294d"
>>> re.findall(r'[0-9]+',str_) #[0-9] tells regex to look for digits only while + tells to look for one or more of them
['1231', '45', '294']
你的代码在哪里?它的问题究竟是什么? – jonrsharpe 2014-11-22 13:58:03
你需要向我们展示你之前的尝试! – Kasramvd 2014-11-22 13:58:52
仇恨强烈。 我是新来的,这是我的第二篇文章。我知道接下来要做什么' – Shaney96 2014-11-22 14:10:04