这是我的问题,我有两个不同的列表,列出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
有没有办法编辑上面的代码以使事情正常工作?谢谢你的帮助。
答案 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)
它返回列表中的第一个匹配项。如果列表中没有此类名称,则phone
为None
。
答案 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