【问题标题】:Python - Add words from string list that begin with a specific charPython - 从字符串列表中添加以特定字符开头的单词
【发布时间】:2012-01-17 18:13:22
【问题描述】:

好的,卡在另一个 Python 问题上。我已经尝试了几次,但似乎无法弄清楚。

问题:实现一个函数 startString(char, stringlist),它返回列表中以字符 char 开头的所有字符串的列表。

startString('s',["simple", "to", "do", "some","things"])

这是我迄今为止尝试过的,我知道它不起作用:

def startString(char, stringlist):
    newlist = []
    for i in stringlist:
        if stringlist[0] == char:
            newlist.append(stringlist)
    print newlist

感谢您提供的任何帮助。

【问题讨论】:

  • 是的,但我已经坚持了几天了。我使用这个网站来获取想法和工作。
  • 没问题,请记住给它们贴上这样的标签 - 我们很乐意提供帮助,但不会为您做作业。 :)
  • 提示:您正在测试 stringlist[0] == char。您可能想添加一个“print stringlist[0], char”命令来查看发生了什么。提示 #2:你在新列表中添加了什么?
  • 大声笑,好的,谢谢。是的,这个网站在一些编程方面帮助了我一点。我在一个学期会使用 7 种不同语言的班级,我必须学习语法并在获得程序后的 2 周内提交。

标签: python string char


【解决方案1】:

猜这可能是家庭作业,我们将从一些简单的事情开始。

  1. 您可以使用列表理解在 Python 中创建新列表。

    newList = [item for item in oldList]

  2. 您可以像处理列表一样对字符串进行索引。这相当于来自字符串的.startswith() 方法。

    firstChar = inputString[0]

  3. 您可以在列表解释中使用条件来控制新列表中显示的项目。

    newList = [item for item in oldList if <logic test>]

  4. 根据您的评分方式,请记住return 新列表,而不是print。如果以任何自动化方式进行评分,差异将是显而易见的。

进一步查看您提供的示例代码,您的困难可能在这一行:

if stringlist[0] == char:

在这里,您从传入列表中检索第一个值,而不是您尝试测试的字符串的第一个字符。这足以给你带来麻烦。此外,您可能不想要这一行:

newlist.append(stringlist)

这会将整个输入列表放入您的输出列表中。你可能想要:

newlist.append(i)

许多这些细节也可以在其他答案/建议中找到。

【讨论】:

  • 那么,这是 3 行不同的代码吗?我不确定我是否掌握了这个概念。
  • @seiryuu10 - 这三行分别有效(<logic test> 除外,您将用实际测试替换它)。为家庭作业提供复制/粘贴代码通常是不好的形式 - 我宁愿指出问题所在,而不是为您解决问题。
  • 感谢您的帮助。我确实搜索了这些概念,现在我理解了更多。我很高兴这是唯一使用 python 的作业,但我可能会自己探索更多。
  • @seiryuu10 - 很高兴为您提供帮助,很高兴您找到了所需的东西。 :)
【解决方案2】:

试试这个:

def startString(char, stringlist):
    newlist = []
    for string in stringlist:
        if string.startswith(char):
            newlist.append(string)
    print newlist

【讨论】:

  • 我尝试了这组代码,看看它是否可以工作,我得到了这个:'startstring('s',["simple","to","do","some","things"]) [['simple', 'to', 'do', 'some', 'things'], ['simple', 'to', 'do', 'some', 'things']]
  • startString("s",["simple","to","do","some","things"] 我的输出是:['simple', 'some']
  • @RanRag 那是因为我在 7 分钟前编辑了你的答案。 :P
  • 大声笑,我没注意到。感谢您的编辑。我刚刚复制了seiryuu's 代码并添加了startswith()
  • 好吧,我搞砸了,newlist.append(stringlist) 需要是 'newlist.append(string)`。
【解决方案3】:

您应该查看Python List Comprehensions。这个“函数”通常会用 python 写在一行中。你也想看看the .startswith method of strings

【讨论】:

    【解决方案4】:

    for i in stringlist 遍历您的列表,每个元素都表示为变量 i。看看你在循环中测试了什么,看看它是否真的是你想要检查的。 stringlist[0] 到底是什么?

    【讨论】:

      【解决方案5】:

      使用mystring.startswith()Check docs

      然后使用,例如,使用startswith过滤列表项的列表推导

      【讨论】:

      • 使用 mystring[0] 是等价的,他已经做好了。
      • @g.d.d.c 是的,它是一样的,但在这种情况下,startswith 会产生一个非常易读、易于理解的代码行 --> item ... if item.startswith('s')。我认为值得向 OP 展示它
      • 我同意这要好得多,但从技术上讲,它并不等同(例如,startString('si', ['simple']) 将返回一个空列表,其中包含他的原始(更正)代码)。
      • 只是好奇:为了比较,切片比startswith(py3.2,timeit)快5倍
      • 你是对的 - [0] 仅在测试字符串长度为 1 时才等效。否则,startswith 更合适,除非您正在使用要检查的字符串长度进行切片.不过速度差异很有趣。 :)
      【解决方案6】:
      for i in stringlist:
         if stringlist[0] == char:
      

      第二行表示您只查看列表中的第一个单词,而不是查看其中一个字符串的第一个字母。

      【讨论】:

        【解决方案7】:

        您正在遍历字符串列表,但随后您检查字符串列表的第一个元素是否等于char。您应该在for-loop 中将stringlist 更改为i。 (尽管使用filter() 可能会更好。

        【讨论】:

          猜你喜欢
          • 2018-12-22
          • 1970-01-01
          • 1970-01-01
          • 2015-04-28
          • 1970-01-01
          • 2022-11-17
          • 2023-04-10
          • 2020-12-12
          • 1970-01-01
          相关资源
          最近更新 更多