如何从两个单独的列表中获取两个值来打印(python)

时间:2011-11-22 17:23:51

标签: python list zip

这是我的问题,我有两个不同的列表,列出a,其中包含人员名称,列表b包含他们的电话号码:

a = ["peter", "bob", "john", "jack"]
b = ["8954 3434", "8999 4432", "8976 5443", "8990 3331"]

我需要做的是提示用户输入一个名称来自列表a,然后python应该自动从列表b打印出该人的电话号码。

我遇到了一个看似非常有趣的代码:

for x, y in zip(a, b):
    print x, y

这几乎打印了每个单独的名称和相应的电话号码,这基本上就是我需要的,但是不是列表中出现的每个名字,我需要的是用户能够输入单个名称并为此名称显示电话号码。

只是澄清一下,使用上面的代码给出了输出:

peter 8954 3434
bob 8999 4432
john 8976 5443
jack 8990 3331

虽然我想要的是用户能够输入一个名称,例如“peter”,它应该给出输出:

peter 8954 3434

有没有办法编辑上面的代码以使事情正常工作?谢谢你的帮助。

7 个答案:

答案 0 :(得分:4)

将数据放入字典中:

>>> a = ["peter", "bob", "john", "jack"]
>>> b = ["8954 3434", "8999 4432", "8976 5443", "8990 3331"]
>>> phone_numbers = dict(zip(a,b))

然后你可以从他们的名字中找到某人的电话号码:

>>> phone_numbers['john']
'8976 5443'

如果您只想使用列表执行此操作,可以使用index,但请注意,这会导致性能不佳:

b[a.index('john')]
'8976 5443'

答案 1 :(得分:2)

你想要像

这样的东西
print b[a.index("bob")]

答案 2 :(得分:2)

解决此问题的最基本方法:

who = raw_input("Give a name")
for name, number in zip(a, b): 
    if name == who:
        print name, number

我希望这是家庭作业。

答案 3 :(得分:1)

  

我必须使用此问题的列表

如果您无法使用phone = dict(zip(a,b)).get("peter"),请使用list comprehensions

phones = [phone for name, phone in zip(a,b) if name == "peter"]

它返回"peter"个电话号码列表。它允许您有多个具有相同名称的条目。如果列表很大,那么它比dict方法(O(1) vs. O(N))慢得多。

如果您只需要一个号码,请使用next()

phone = next((phone for name, phone in zip(a,b) if name == "peter"), None)

它返回列表中的第一个匹配项。如果列表中没有此类名称,则phoneNone

答案 4 :(得分:0)

将它们放入字典中:

people = dict(zip(a, b))

然后看看名字:

name = "john"
print("%s's number is %s" % (input, people[name]))

答案 5 :(得分:0)

创建压缩列表的字典:

names = ["peter", "bob", "john", "jack"]
phones = ["8954 3434", "8999 4432", "8976 5443", "8990 3331"]
phones_by_name = dict(zip(names, phones))
print "bob", phones_by_name["bob"]
print "jack", phones_by_name["jack"]

给出:

bob 8999 4432
jack 8990 3331

答案 6 :(得分:0)

你不能只使用if声明吗?

for x, y in zip(a, b):
    if x == name_input:
        print x, y

或者我想在你的代码的上下文中

for name, phone in zip(names_list, phone_list):
    if name == name_input:
        print name, phone

但是你应该告诉你的老师使用dict