2013-05-20 82 views
0

如果我有這樣的點的2dlist ...從列表中索引選擇,但保留其他相關項目列表

myList=[['ab','0_3','-1','1'],['bm','2_1','-3','2'],['am','4_1','-1','3'],...]] 

其中'-1','1'例如是x,y座標(最後2列)我想只顯示其索引像這樣的列表的一部分...

[0] ab # I don't want to display the other list items, just the index and first col 
[1] bm 
[2] am 

...這樣用戶就可以通過索引號選擇其中之一進行原點。我想我可以列舉這樣...

for row in enumerate(myList): 
    i, a= row 
    col= (i, a[0]) 
    newList.append(col) 
    print cols 

但是,一旦我讓用戶選擇一個即。用戶選擇'0'並設置變量origin='ab',如何獲得與原點相關的x,y(或[2],[3])列作爲原點座標(我需要能夠與列表的其餘部分)?

使用此方法,我可以以某種方式使用分配給選定點的變量,即。 origin = ab,然後得到它的x,y,並將它們分配給x1,y1 ... 因爲枚舉給出了2個元組(i,a)並將它們追加到newList,這就是我所有的newList,或者我也可以追加其他列但不顯示它們? 我希望我的解釋是很清楚......我只有嚴重的屠殺碼ATM


所以,我終於拿到了這個最有...

import csv 
myList=[]  
try: 
    csvr = open('testfile.csv','r') 
    next(csvr, None) 
    theList = csv.reader(csvr) 

    for row in theList: 
     myList.append(row) 

    for row in enumerate(myList): 
     i, a = row 
    print i, a[0] 
except IOError: 
    print 'Error!!!' 


try: 
    choice = raw_input("Select a set: ") # Can also enter 'e' 
    if choice=='e' 
     print 'exiting' 
    else: 
     pass 
    user_choice = myList[int(choice)] 
    name, id, x, y= user_choice  
    print name, id, 
    return float(x), float(y)  
except:  
    print 'error' 

它打印效果與預期和我的工作現在可以返回x,y,這很棒,但它只是提示我輸入一個數字。有什麼建議麼?

+0

「將通話僅僅是X1,Y1 = choiceFunction( )?並添加返回x,y到上面的代碼「......也許。當然,你可以這樣做。對我來說,似乎至少,csv文件名應該是一個choiceFunction()接受的參數,而不是沒有參數。沒有參數比擁有太多參數要好,但重要的是要考慮是否有任何事情是你真的應該作爲參數傳入的。 – kampu

+0

對不起,我剛剛更新了我的文章 – user2395759

+0

哦,男孩,那很愚蠢。我把它放在一個while循環中,現在看起來好像 – user2395759

回答

0

1)保持列表格式,您可以使用用戶的選擇作爲一個列表索引:

myList = [['ab','0_3','-1','1'],['bm','2_1','-3','2'],['am','4_1','-1','3']] 

for row in enumerate(myList): 
    i, a = row 
    print i, a[0] 


choice = int(raw_input("Select a set: ")) 
user_choice = myList[choice] 

name, id, x, y = user_choice 

print name, id, float(x) + float(y) # use float() to convert strings to floats 

輸出示例:

~ $ python tester.py 
0 ab 
1 bm 
2 am 
Select a set: 1 
bm 2_1 -1.0 
+0

我明白你的意思了。但如果我要求int輸入(索引號),如果[2]和[3]有時浮動,例如。 -1.22,3.10?我可以在分配給user_x,user_y時轉換它們嗎? – user2395759

+0

如果'user_x'是'-1.22'(一個字符串),那麼你可以使用'float(user_x)'得到-1.22(一個浮點數)。你有沒有別的想法? –

+0

這就是我心中的想法,但是我會將該行放在user_x = myList [choice] [2]之下嗎?然後我得到「列表索引必須是整數,而不是str」。我也應該提到'myList'是一個csv並使用csv模塊讀入。它沒有硬連接到代碼 – user2395759