jel*_*ans 4 python csv list coordinate
全新的Python(和一般的编程),如果这很简单和/或在我找不到的地方回答,请随意以典型的论坛方式骚扰我.
我有一堆CSV,每个包含10个XY坐标,如下所示:
10,5
2,4
5,6
7,8
9,12
3,45
2,4
6,5
0,3
5,6
Run Code Online (Sandbox Code Playgroud)
我想将X坐标和Y坐标分成两个单独的列表,这样我就可以从给定列表中的每个值中减去一个值.例如,从X坐标列表中的每个值减去5,从Y坐标列表中的每个值减去3.然后我将采用每个值的abs()并找到最小值.一旦找到这些最小值,我想将这些列表一起添加,以便将每个值添加到它的对应物中
IE)如果X的绝对值是这样的
4
5
....
Run Code Online (Sandbox Code Playgroud)
和Y之类的东西
6
7
....
Run Code Online (Sandbox Code Playgroud)
我想要添加4和6,然后是5和7等.
为了分开他们,我试过了
import csv
filein = open("/path/here")
reader = csv.reader(filein, skipinitialspace = True)
listofxys = []
for row in reader:
listofxys.append(row)
Xs = listofxys.pop(0) # to pop all the X's
Ys = listofxys.pop() # to pop all the Y's
Run Code Online (Sandbox Code Playgroud)
但它不是所有的前导值,而是提供第一个XY对.我在这做错了什么?
最终的目标是找到最接近XY坐标的点,所以如果这是一个不好的方法,请随意引导我朝另一个方向前进.
提前致谢!
值得注意的是,
在Python中打开文件时应该尝试使用
该with语句.这更具可读性,并消除了文件未被封闭的可能性(即使发生异常).
你的实际问题在于你没有做你想做的事.
reader = csv.reader(filein, skipinitialspace = True)
listofxys = []
for row in reader:
listofxys.append(row)
Run Code Online (Sandbox Code Playgroud)
所有这一切都是reader = list(csv.reader(filein, skipinitialspace = True))以非常低效的方式进行的.
你想要做的是使用了zip()内置采取对的列表,并把它变成两个列表.你使用星号运算符执行此操作:
import csv
with open("test") as filein:
reader = csv.reader(filein, skipinitialspace = True)
xs, ys = zip(*reader)
print(xs)
print(ys)
Run Code Online (Sandbox Code Playgroud)
这使:
('10', '2', '5', '7', '9', '3', '2', '6', '0', '5')
('5', '4', '6', '8', '12', '45', '4', '5', '3', '6')
Run Code Online (Sandbox Code Playgroud)
请注意这些值是字符串的事实.如果你想把它们作为数字,你会想要使用csv.QUOTE_NONNUMERIC,例如:reader = csv.reader(filein, quoting=csv.QUOTE_NONNUMERIC, skipinitialspace = True)
这使:
(10.0, 2.0, 5.0, 7.0, 9.0, 3.0, 2.0, 6.0, 0.0, 5.0)
(5.0, 4.0, 6.0, 8.0, 12.0, 45.0, 4.0, 5.0, 3.0, 6.0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6398 次 |
| 最近记录: |