2013-04-18 110 views
0

我在這些程序中遇到了一些問題。我正在Python中編寫一個函數,它將一個列表和一個字符串作爲輸入列表,如果列表中列表的第二個元素等於給定的字符串,則返回「名稱在這裏」。在這種情況下,名單上有名單是這個python中的這個簡單函數無法正常工作

railway = [["Milan","Zurich"],["Zurich","Bern"],["Bern","Berlin"],["Berlin","Copenaghen"]] 

我的功能是:

def travel(list , stringdestination): 
     i = 0 
    for elemento in range(len(list)): 
     if list[i][1] == stringdestination: 
      print "target reached" 

當我運行:

travel(railway, "Bern") 

它應該顯示:「目標達成」,但它不,它不顯示任何內容,爲什麼?

+3

什麼時候'我'得到更新?試着改變它。 – squiguy

+4

不要像那樣迭代列表。使用列表中的項目:'。並且不要將你的列表命名爲'list'。 – geoffspear

回答

3

你永遠不會增加我。你的循環應該是:

for pair in list: 
    if pair[1] == stringdestination: 
     print "target reached" 
+6

從不使用列表的名稱'列表' –

+0

當然,使用__builtin__中的任何內容都是否定的,但它們不是保留關鍵字。我還希望看到與常用變量名稱(如列表和類型)重疊較少。 – Ben

+0

然後,我建議你更新你的答案,使用'my_list','destination'或類似的東西來作爲一個好的變量命名的示例 –

0

我將它包裝在一個function,所以我停下來時,創辦了正確的字符串。它在整個列表循環阻止:

def arrived(s, raileway): 
    for r in railway: 
     if r[1] == s: 
      return True 
    return False 

if arrived("Bern", railway): 
    print("target reached") 
+1

恕我直言,應避免運營商模塊。它很少使代碼更具可讀性。我不知道爲什麼'itemgetter(1)(r)'比'r [0]'更具可讀性。 – Ben

2

的幾點:

  1. 不要使用list作爲變量名。 list是一個內置的名字
  2. 迭代直接列出for i in mylist
  3. 有可能通過在迭代

分配到2個變量例如爲「解包」清單中的對:

def travel(places, destination): 
    for start, dest in places: 
     if destination == dest: 
      print "target reached" 
      break 

當您找到目的地時,您可能想停止迭代。通過直接返回函數或打破並且不返回任何東西(如果函數中沒有return,則它隱式返回None)。

3

正如已經回答的那樣,你並沒有遞增循環變量。但是,這是不正確的,更重要的是,你會像在工具箱中只有一把錘子的男人那樣來到這個螺絲。這幾乎是數據結構稱爲字典的確切原因。這是一個內置的。

閱讀此,它更容易和更好。 http://www.tutorialspoint.com/python/python_dictionary.htm

+2

@FEdericoSOmaschini,如果您需要訂購數據,則可以使用Collections:OrderedDict:http://docs.python.org/2/library/collections.html#collections。OrderedDict –

+0

謝謝凱爾我開始使用字典,但問題是數據沒有排序 –