繁体   English   中英

如何从两个单独的列表中获取两个值以进行打印(Python)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM