根据列表中的项目合并列表的某些部分 - Python

问题描述:

我想根据是否存在逗号合并列表的某些部分。如果我使用用户输入:"1231,fdkgjdkfj45,294d",我希望将其转换为["1231", "45", "294"]。我可以删除列表中不是数字的所有内容(使用列表理解),但我希望程序识别逗号的位置,然后将逗号前的列表中的项目合并在一起(直到前一个逗号)。根据列表中的项目合并列表的某些部分 - Python

我明白我还没有措辞这个惊人的,但我认为你应该能够明白我的意思。

我觉得是必要的步骤如下:

  1. 在不是数字或逗号列表中删除所有内容(这样做了,使用另一个列表,列表理解)

  2. 检查对方是否有逗号,然后删除重复项。 (我应该能够很容易地做到这一点)

  3. 使用“for”循环来检查列表中的位置,并且在查找逗号时,合并列表中的所有项目,直到此逗号为止前面的逗号在一起。 (这是我不能做的)

任何反应将不胜感激。

+2

你的代码在哪里?它的问题究竟是什么? – jonrsharpe 2014-11-22 13:58:03

+1

你需要向我们展示你之前的尝试! – Kasramvd 2014-11-22 13:58:52

+0

仇恨强烈。 我是新来的,这是我的第二篇文章。我知道接下来要做什么' – Shaney96 2014-11-22 14:10:04

您可以在','字符的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'] 
+0

感谢你的这一点,在不需要实现其他模块的情况下,这更符合我的水平。 – Shaney96 2014-11-22 14:09:16

+0

@ Shaney96:正则表达式(正则表达式)是强大的,_definitely_值得了解。大多数脚本语言都有某种形式的正则表达式支持,虽然语法有一些变化,但是一旦你用一种语言掌握了它们,你就可以在其他语言中使用它们。不过,我觉得使用正则表达式对于你的问题可能是过度的,我倾向于使用Cyber​​的答案中使用的方法。 – 2014-11-22 14:34:04

+0

我会同意这一点,我目前正在做我的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'] 
+0

使用're.split()'比'findall ()'也不应该回答像功课一样的问题! – Kasramvd 2014-11-22 14:02:04

+0

为此欢呼,我以前从未听说过这个模块,并且这个工作很有魅力,我会对正则表达式进行一些研究,以便了解它是如何工作的。 – Shaney96 2014-11-22 14:07:47

+0

这不是一个家庭作业问题,我只是卡在我创造的游戏中的一部分,这是Tkinter的河内游戏塔 – Shaney96 2014-11-22 14:08:44