2014-09-29 112 views
0

目前开始,我有这样的:打印字符串以特定字符

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与启动串任何信件AM。我似乎无法找到任何支持此方法的方法。有没有我忽略的本地方法?

+0

迭代通过列表('for'循环),并检查'A <=项[0] .upper()然后打印<= M'。 – isedev 2014-09-29 23:32:30

回答

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

怎么样简单明了:

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) 
1

你误会什么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')