[英]How to get two values from two seperate lists to print (python)
这是我的问题,我有两个不同的列表,列表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
有没有一种方法可以编辑上面的代码以使事情正常进行? 谢谢你的帮助。
将数据放入字典中:
>>> 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'
你想要类似的东西吗
print b[a.index("bob")]
?
解决此问题的最基本方法:
who = raw_input("Give a name")
for name, number in zip(a, b):
if name == who:
print name, number
我希望这是家庭作业。
我必须使用此问题的列表
如果您不能使用phone = dict(zip(a,b)).get("peter")
则可以使用列表推导 :
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
。
将它们放入字典中:
people = dict(zip(a, b))
然后只需查找名称:
name = "john"
print("%s's number is %s" % (input, people[name]))
创建压缩列表的字典:
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
您不能只使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.