【问题标题】:Print strings in a list that begin with a specific character打印列表中以特定字符开头的字符串
【发布时间】:2014-09-29 23:29:36
【问题描述】:

目前,我有这个:

lst = ['Eleanor', 'Sammy', 'Owen', 'Gavin']

def partition(lst):
    if any('abcdefghijklm') in ([x[0] for x in lst]):
        print(lst)
    else:
        print('This still isn\'t working')

我正在尝试检查 lst 中每个字符串的第一个字符,并且只打印 lst 中以任何字母 A-M 开头的字符串。我似乎找不到任何支持这一点的方法。有没有我忽略的本机方法?

【问题讨论】:

  • 遍历列表(for循环)并检查A <= item[0].upper() <= M然后打印。

标签: python string list character selection


【解决方案1】:
lst = ['Eleanor', 'Sammy', 'Owen', 'Gavin']
whitelist = set('abcdefghijklm')
for name in lst:
    if name[0].lower() in whitelist:
        print(name)

【讨论】:

    【解决方案2】:

    您误解了 any 的作用。如果提供给它的迭代器的任何成员为 True,则返回 True:print(any([False, [], 0, None, 'a'])) #outputs True 相反,all 仅在传递给它的迭代器的 每个 成员为 True 时返回 True。

    不过,它是一个强大的工具,您可以使用它来完成这项任务:

    from string import ascii_lowercase as lowercase #a-z
    
    def partition(*names):
        if any(n[0].lower() in lowercase[:13] for n in names):
            print(*names)
        else:
            print("No names matched the criteria")
    
    partition('Eleanor', 'Sammy', 'Owen', 'Gavin')
    

    【讨论】:

      【解决方案3】:

      简单明了的怎么样:

      def partition(lst):
          print([ x for x in lst if x[0].lower() in 'abcdefghijklm' ])
      

      或者说很清楚的呢:

      def partition(lst):
          for word in lst:
              if word[0] in 'abcdefghijklm':
                   print(word)
      

      【讨论】:

        猜你喜欢
        • 2016-01-08
        • 2016-07-26
        • 2017-08-08
        • 1970-01-01
        • 1970-01-01
        • 2020-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多