【问题标题】:Merging certain parts of a list together, depending on an item in the list - Python根据列表中的项目将列表的某些部分合并在一起 - Python
【发布时间】:2014-11-22 13:56:41
【问题描述】:

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

我知道我的措辞并不令人惊讶,但我认为您应该能够理解我的意思。

我觉得必要的步骤如下:

  1. 删除列表中非数字或逗号的所有内容(完成此操作,使用另一个列表和列表理解)

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

  3. 使用“for”循环检查列表中的位置,当找到逗号时,将列表中该逗号之前的所有项目合并在一起,直到前一个逗号。 (这是我做不到的)

我们将不胜感激。

【问题讨论】:

  • 你的代码在哪里,它到底有什么问题?
  • 您需要向我们展示您之前的尝试!
  • 仇恨很强烈。我是新来的,这是我的第二个帖子。我知道接下来该怎么做'
  • 没有仇恨,一切都是为了自己,SO是一个学习的地方,这里的人们不仅仅是为了解决问题,而是为了共同学习!
  • 公平地说,我喜欢学习 Python 的新技巧,如下所示。为建议喝彩! :)

标签: python list merge slice


【解决方案1】:

您可以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:正则表达式 (regex) 功能强大,绝对值得学习。大多数脚本语言都有某种形式的正则表达式支持,尽管语法有一些变化,但是一旦你掌握了一种语言的窍门,你就可以在其他语言中使用它们。但是,我觉得对于您的问题,使用正则表达式可能有点矫枉过正,我倾向于使用 Cyber​​'s answer 中使用的方法。
  • 我同意那个,我目前正在学习 A2 级别的计算课程,显然还在学习很多关于这门语言的知识,并且学习了很多:)
【解决方案2】:

你只需要正则表达式..

>>> 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']

【讨论】:

  • 使用re.split() 比使用findall() 更好,而且你不应该回答家庭作业之类的问题!
  • 为这个干杯,我以前没有听说过这个模块,这很有魅力,我将对正则表达式进行一些研究,以便了解它是如何工作的。
  • 这不是一个家庭作业问题,我只是卡在我正在创建的游戏中,这是 Tkinter 中的河内塔游戏
猜你喜欢
  • 2014-03-16
  • 2010-11-11
  • 2017-07-11
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
相关资源
最近更新 更多