这个代码
else:
return None
,跳出for
循环的,如果if
试验没有成功,所以如果名称不匹配,没有其他名字的测试列表中的第一个元组。你不需要那个!
而且,你不需要做
tuplo[index][0:]
你可以做
tuplo[index]
这是你的代码的修复版本。
tuplo = [
('joao', 300, 20),
('ana', 80, 15),
('patricia', 17, 90),
]
def coordenadas(tuplo, nome):
for indice in range(len(tuplo)):
if tuplo[indice][0] == nome:
print(tuplo[indice])
coordenadas(tuplo, 'joao')
coordenadas(tuplo, 'ana')
coordenadas(tuplo, 'patricia')
输出
('joao', 300, 20)
('ana', 80, 15)
('patricia', 17, 90)
顺便说一句,如果你只是想找到第一个匹配的元组,你可以添加一个break
或return
语句来if
块的结尾,就像这样:
def coordenadas(tuplo, nome):
for indice in range(len(tuplo)):
if tuplo[indice][0] == nome:
print(tuplo[indice])
break
但是,有更好的方法来完成这项任务。在Python,最好直接在集合中的项目进行迭代,而不是通过间接指标迭代:
def coordenadas(tuplo, nome):
for t in tuplo:
if t[0] == nome:
print(t)
break
更有效的方式是将您的列表转换为一个字典,特别是如果你有很多的元组。例如:
tuplo = [
('joao', 300, 20),
('ana', 80, 15),
('patricia', 17, 90),
]
tuplo_dict = {t[0]: t for t in tuplo}
def coordenadas(data, nome):
print(nome, data.get(nome))
coordenadas(tuplo_dict, 'joao')
coordenadas(tuplo_dict, 'ana')
coordenadas(tuplo_dict, 'patricia')
coordenadas(tuplo_dict, 'tom')
输出
joao ('joao', 300, 20)
ana ('ana', 80, 15)
patricia ('patricia', 17, 90)
tom None
它使用多一点的RAM,但它比以前的版本更有效,因为在字典中查找的产品非常快。
尝试:http://www.pythontutor.com |你期望会发生什么? –
在[[o:]'应该做的事情中,切片和字母“o”是什么?您提供的代码无法运行('NameError:name'o'未定义')。即使你的意思是零,那个片在这种情况下也是没有用的。 – cdarke