【发布时间】:2014-06-02 14:35:01
【问题描述】:
我在管理 Python2.7 的大列表时遇到了困难:
我导入了一个包含三列的 .csv:InputID、TargetID 和 distance(介于两者之间)。
我已将所有值导入到一个列表中,其中显示:
['InputID1','TargetID1','Distance1','InputID1','TargetID2','Distance2',InputID1','TargetID3','Distance3',...]
所以对于每个 InputID,都有三个对应的 TargetID。
我要做的是将所有包含相似 InputID 的记录分组,并找到距离最短的相应 TargetID。并确保一旦找到,不会重复任何 InputID/TargetID。
这是我目前所拥有的:
import csv
ids=[] ##Unique InputID list##
e=[] ##Empty .csv list##
f=open("D_Matrix.csv")
csv_f = csv.reader(f)
n=0
for row in csv_f:
str_list0=str(row[0])
str_list1=str(row[1])
str_list2=str(row[2])
while n>0:
x=str_list0 ##InputID##
y=str_list1 ##TargetID##
z=str_list2 ##Distance##
if not x in ids:
ids.append(x)
e.append(x) ##Add Origin to list e##
e.append(y) ##Add Target to list e##
e.append(z) ##Add Distance to list e##
break
else:
n+=1 ##Prevents column labels from being added to list
print e
f.close()
我对python编程还是很陌生,所以如果有什么我可以做的进一步澄清,请告诉我!
我非常感谢任何 cmets/建议。
-邮递员
【问题讨论】:
-
我想你忘了说到底是什么问题 ;-)
-
蒂姆,感谢您的快速回复。我会尝试更具体一点:我正在使用一个逗号分隔值列表。这些值代表表中的三列。我需要以某种方式将所有具有相似 InputID 的“行”分开。一旦我只有包含相似 InputID 的记录,我想选择距离最短的 TargetID,然后将 TargetID 现在作为 InputID 重复该过程。例如:list = [1,2,5,1,3,10,1,4,50] 对于 InputID1:TargetID2 距离为 5 个单位,TargetID3 距离为 10 个单位,TargetID4 距离为 50 个单位。 TargetID2 应该成为新的 InputID。
-
恕我直言,您不需要将所有值都转换为字符串,因为您所有的比较都将是字符串比较,而不是数字并且字符串排序为“100”
标签: list python-2.7 csv