列表和字母限制

时间:2015-09-22 14:31:32

标签: python list python-3.x input

我正在尝试编写一个程序,要求用户输入名称列表并打印那些以字母A到M开头的名称。我当前的代码返回一个TypeError,并说'NoneType'不可迭代。

lst = print(input('Enter a list of names: '))
alpha = ['a,b,c,d,e,f,g,h,i,j,k,l,m,A,B,C,D,E,F,G,H,I,J,K,L,M']
for x in alpha:
    if x in lst:
        print(x)

由于

2 个答案:

答案 0 :(得分:0)

首先,不需要重新创建字母表,它已经在python的string.ascii_lowercasedocumentation)中完成了

其次,如果你想要用空格分隔多个字符串,你需要使用raw_input,然后,你需要拆分它以便得到一个可以迭代的名字列表,检查是否包含,等等。

以下是两种不同的方式:

from collections import defaultdict
from string import ascii_lowercase

lst = raw_input('Enter a list of names: ')
names = lst.split()

by_first_letter = defaultdict(list)
for name in names:
    by_first_letter[name[0]].append(name)

for letter in ascii_lowercase:
    if by_first_letter[letter]:
        print letter, by_first_letter[letter]

另一种解决方案:

names = lst.split()
for letter in ascii_lowercase:
    matches = [name for name in names if name.startswith(letter)]
    if matches:
        print letter, matches

更新:更简单快捷的解决方案:

from collections import defaultdict

by_first_letter = defaultdict(list)
for name in raw_input('Enter a list of names: ').split():
    by_first_letter[name[0]].append(name)

for letter, names in by_first_letter.items():
    print letter, names

答案 1 :(得分:0)

错误原因:

TypeError: argument of type 'NoneType' is not iterable

在您的代码的第4行,您写道:

if x in lst:

使用保留作品in表示您要检查列表x中是否存在lst。 Python将为您执行此操作的方式是在列表上“迭代”(意味着逐个将其与每个项目进行比较)。说它不是“可迭代”的错误是因为它试图将lst视为列表,但它不是一个。

我在下面做了一些修改,做了我认为你正在寻找的事情:

lst = input('Enter a list of names: ').split(" ")
alpha = ['a','b','c','d','e','f','g','h','i','j','k','l','m']
for x in lst:
    if x[0].lower() in alpha:
        print(x)

示例:

INPUT: Andrew Matthew Zain
OUTPUT: Andrew
        Matthew

循环在每个空格分割用户输入,这意味着lst实际上是一个列表。然后,您将使用缩写x[0]抓住第一个字符,然后检查alpha中是否存在该字符。