在列表中分隔值以生成坐标对

时间:2013-06-03 08:24:10

标签: python list csv

以下是我目前的代码。

import csv
def function():

    latitude = []
    longitude = []
    with open('data.csv', 'rU') as input: #
          dL= list(csv.reader(input))
          sL = [row[4] for row in dL[1:]]
          longitude.append(sL)
          sL1 = [row[3] for row in dL[1:]]
          latitude.append(sL1)

    print latitude
    print longitude

    print
    for i in range(0, len(latitude)):
        print "Co-ordinates (" + str(latitude[i]) + "," + str(longitude[i]) + ")"

function()

对,所以我的输出产生了这个

[['-20.71', '-20.73', '-20.88', '-20.78', '-20.76', '-20.68', '-20.95', '-21.06', '-21.05', '-20.9']]
[['116.77', '116.75', '116.67', '117.15', '117.16', '117.19', '117.37', '117.44', '116.26', '117.64']]

Co-ordinates (['-20.71', '-20.73', '-20.88', '-20.78', '-20.76', '-20.68', '-20.95', '-21.06', '-21.05', '-20.9'],['116.77', '116.75', '116.67', '117.15', '117.16', '117.19', '117.37', '117.44', '116.26', '117.64'])

这显示了我想要生成的列表。

我想要做的是产生一个看起来像这样的输出

Co-ordinates (-20.71,116.77)
Co-ordinates (-20.73, 116.75) 
所有坐标对的

等等。

有没有办法得到我想要的输出的坐标输出?

3 个答案:

答案 0 :(得分:2)

  1. 您想使用extend代替append
  2. zip(latitude, longitude)
  3. 第二个想法,你可以做longitude = [row[4] for row in dL[1:]]。你不需要扩展(或追加或初始化)任何东西。

    更好:

    with open('data.csv', 'rU') as infile:
          dl = list(csv.reader(infile))
    lat_long = [tuple(row[3:5]) for row in dl[1:]]
    for (lat, lng) in lat_long:
        print "Co-ordinates ({0}, {1})".format(lat, lng)
    

答案 1 :(得分:1)

您可以使用以下内容避免预先构建列表和您正在执行的列表组合:

from operator import itemgetter
from itertools import imap, islice

with open('data.csv', 'rU') as fin:
    dL= csv.reader(fin)
    for lat, lon in imap(itemgetter(3, 4), islice(dL, 1, None)):
        print 'coordinates ({}, {})'.format(lat, lon)

答案 2 :(得分:0)

for lat, lng in zip(latitude, longitude):
    print "Co-ordinates (%s, %s)" % (lat, lng)

latitudelongitude转换为“平面”列表而不是包含一个列表的列表后,这将有效。请参阅Elazar关于使用extend的提示。