2015-10-13 55 views
0

下面是我的代碼將我的列表分隔成列表的列表,然後打印單詞'你好',如果這些列表中的值匹配...但是,在解決這個問題時遇到了一些問題。據我所知,所有的語法都是正確的,只是輸出不起作用。爲和如果/ else循環嵌套if語句不工作在python

import csv 
import operator 
import itertools 
import matplotlib.pyplot as plt 

with open('data.txt', 'r') as f: 
    csv_input = csv.reader(f, delimiter=' ', skipinitialspace=True) 
    headers = next(csv_input) 

    counter = 0 
    i = 1 

    for k, g in itertools.groupby(csv_input,key=operator.itemgetter(3)): 
     row = [] 
     for entry in g: 
      entry = [float(e) for e in entry] 
      row.append(entry) 
     counter = counter+1 
     i = i+1 
     #print(row) #(not necessary to see the results hence commented out) 
     if counter == 1: 
      row1 = row 
     else: 
      row2 = row 
      for i in range(1, len(row1)):   
       hi = row1[i][0] 
      for j in range(1,len(row2)): 
       if row2[j][0] == hi:  #this clause doesnt work 
        print('hello') 
      counter=1 
      row1=row 

我在這裏做的是比較第一個列表中的第一個值和下一個列表的第一個行中的第二個值。然後,我想比較第二個列表第一行的第一個值與下一個列表的第一行,等等......(我知道這看起來很混亂!),如果這些值相同,那麼它將繪製一條線,但爲了簡單起見,讓我們只是說它會打印('你好'),因爲代碼工作直到它標記爲'#這個子句不起作用'

任何幫助將不勝感激!在此先感謝

+0

您可以提供輸入文件的示例 – The6thSense

+0

您循環遍歷'row1'的所有元素,每次首先重新分配給'hi'。 'hi'在循環結束時總是'row1 [-1] [0]'。 – dsh

回答

0

然後,我想比較從第二個列表的第一行第一個值,下表的第一行,依此類推......

聽起來像是你想要同時迭代ij。現在,您正在迭代i,然後停止,然後遍歷j。嘗試使用zip

更換

 for i in range(1, len(row1)):   
      hi = row1[i][0] 
     for j in range(1,len(row2)): 
      if row2[j][0] == hi: 
       print('hello') 

隨着

 for i, j in zip(range(1, len(row1)), range(1,len(row2))): 
      hi = row1[i][0] 
      if row2[j][0] == hi: 
       print('hello') 

而且,不知道這是否是有意還是無意 - 啓動range1意味着你開始看每個列表的元素,而不是第一個。如果您想遍歷整個列表,請使用range(len(row1))range(len(row2))

+0

非常感謝你!這似乎是更好的方法來做到這一點。然而,我仍然沒有得到任何輸出比'runfile('/ Users /名稱/桌面/ matrices1.py',wdir ='/用戶名/桌面')' ,這是無意的,所以謝謝! – lyche

+0

我發現我出錯的地方..如果使用你的方法,如果row2 [j] [1] ==嗨,而不是row2 [j] [0] ==嗨 – lyche

+0

很高興聽到它:-) – Kevin