如何从两个单独列出获得两个值进行打印(蟒蛇)
这里是我的问题,我有两个不同的列表,列表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 8954 3434
有没有办法编辑上面的代码让事情正常工作?谢谢你的帮助。
最基本的方法来解决这个问题:
who = raw_input("Give a name")
for name, number in zip(a, b):
if name == who:
print name, number
我希望这是作业。
这似乎工作得最好,非常感谢。 :D – JimmyK
@RikeshPadhiar:把这个和你的问题中基本的'for ... zip()'例子比较一下 - 你不能自己弄清楚'if'吗? –
放在一个字典数据:
>>> phone_numbers['john']
'8976 5443'
如果你想这样做,只使用列表,你可以使用index
:
>>> a = ["peter", "bob", "john", "jack"]
>>> b = ["8954 3434", "8999 4432", "8976 5443", "8990 3331"]
>>> phone_numbers = dict(zip(a,b))
然后,你可以从他们的名字找人的电话号码但请注意,这将有不佳的表现:
b[a.index('john')]
'8976 5443'
创建压缩列表的词典:
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
是否有没有办法让它工作,但列表而不是字典? – JimmyK
难道你不能只使用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
我必须用一个列表这个问题
如果您不能使用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
如果列表中没有这样的名称。
感谢它运作良好。 – JimmyK
嗯我被告知“要同时循环两个或更多的序列,条目可以与zip()函数配对”,所以我假设一个zip函数是要走的路。索引似乎工作正常,所以我猜这里没有问题,但真的没有办法让这个工作使用zip(),以便我有两个不同的方法呢? – JimmyK
这应该被标记“家庭作业” –