Python 按索引从列表中选择,但将其他关联项保留在列表中

Python 按索引从列表中选择,但将其他关联项保留在列表中,python,list,indexing,enumerate,Python,List,Indexing,Enumerate,如果我有一个像这样的点列表 myList=[['ab','0_3','-1','1'],['bm','2_1','-3','2'],['am','4_1','-1','3'],...]] 例如,'-1','1'是x,y坐标(最后两列),我想显示列表的一部分及其索引,如下所示 [0] ab # I don't want to display the other list items, just the index and first col [1] bm [2] am …因此,用户可以通

如果我有一个像这样的点列表

myList=[['ab','0_3','-1','1'],['bm','2_1','-3','2'],['am','4_1','-1','3'],...]]
例如,
'-1','1'
是x,y坐标(最后两列),我想显示列表的一部分及其索引,如下所示

[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
但是,一旦我要求用户选择一个ie。用户选择“0”并设置变量
origin='ab'
,我如何获得与origin关联的x、y(或[2]、[3])列以用作原点坐标(我需要能够与列表的其余部分进行比较)

使用此方法,我是否可以以某种方式使用指定给所选点的变量,即原点=ab,然后获取其x,y并将其指定给x1,y1。。。 因为enumerate给出了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,这很好,但它只是不断提示我输入一个数字。有什么建议吗?

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

我明白你的意思。但是如果我要求输入int(索引编号),如果[2]和[3]有时是浮动的,比如-1.22,3.10,会怎么样?当分配给user_x,user_y时,我可以转换它们吗?如果
user_x
是“-1.22”(一个字符串),那么您可以使用
float(user_x)
获得-1.22(一个float)。你还有别的想法吗?这就是我的想法,但我会把这行放在user_x=myList[choice][2]下面吗?然后我得到“列表索引必须是整数,而不是str”。我还应该提到“myList”是一个csv,使用csv模块读取。它不是硬连接到代码中的。如果您使用enumerate为它们的选择编号,enumerate将始终提供整数的选择。如果你想让他们根据x或y值进行选择,那么这与你最初描述的不同。我稍微扩展了我的答案,这样你就可以看到我的意思了。我可能不理解你问题的一部分,“调用是否只是x1,y1=choiceFunction()?并将返回x,y添加到上述代码中”。。。也许。你当然可以那样做。在我看来,csv文件名至少应该是choiceFunction()接受的参数,而不是没有参数。没有争论总比有太多争论好,但重要的是要考虑是否有任何东西你真的应该作为参数传入。对不起,我刚刚更新了我的postOh boy,这太愚蠢了。我把它放在一个while循环中,现在看起来还可以