【问题标题】:Isolating letters in a string and converting them to a list隔离字符串中的字母并将它们转换为列表
【发布时间】:2015-01-29 13:35:25
【问题描述】:

我希望能够将字符串中的字母从输入中分离出来,并将它们作为包含 4 个单独的小写字符的集合返回。

这是我目前所拥有的:

def main():
    original = input(str("Enter a 4-letter word: "))

    letters = isolate_letters(original)

def isolate_letters(original):
    letters = list(original.items())

    return letters
main()

【问题讨论】:

  • 你能展示一个示例输入和预期输出吗?一个字符串已经是一个可迭代的序列,根据你想对列表做什么来创建一个列表可能是多余的。
  • 字符串没有items()函数。

标签: python string list collections converter


【解决方案1】:

我想你想过滤 ascii 字母。如果不是,python 字符串是可迭代的,因此对于大多数实际应用程序,字符串的行为就像一个列表 - 尝试将字符串当作列表来使用。

如果你想要所有字母:

>>> import string
>>> original = "foo, bar, 2014"
>>> letters = [c for c in original if c in string.ascii_letters]
['f', 'o', 'o', 'b', 'a', 'r']

如果您希望它们不重复:

>>> unique_letters = set(letters)
>>> unique_letters
{'a', 'b', 'f', 'o', 'r'}

[更新]

非常感谢!我是 python 新手,请问有没有机会解释一下它是如何工作的?

好吧,string.ascii_letters 包含:

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

我们正在使用 Python 列表推导,这是一种基于数学中 set-builder notation 的语法:

[item for item in some_list if condition]

这几乎是简单的英语:如果条件为真,则返回 some_list 中的项目列表。在我们的例子中,我们正在使用 in 运算符测试字符是否为 ascii 字母。

Python 中的set 对象是一个无序列表,确保没有重复项。

【讨论】:

  • 非常感谢!我是 python 新手,有没有机会解释一下它是如何工作的?
【解决方案2】:

你想要前 4 个小写字符:

letters = [c for c in original.lower() if c.isalpha()][:5]

首先将字符串转换为小写 (lower()),然后从字符串中挑选出所有字母字符 (isalpha()),最后切掉前 4 个字符 ([:5])

【讨论】:

    【解决方案3】:
    >>> s = "1234"
    >>> list(s)
    ['1', '2', '3', '4']
    

    【讨论】:

      猜你喜欢
      • 2014-05-28
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 2020-10-09
      • 2014-11-27
      • 2020-01-29
      相关资源
      最近更新 更多