這個代碼
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