【问题标题】:Extracting data from a list using a for loop使用 for 循环从列表中提取数据
【发布时间】:2016-10-11 03:41:33
【问题描述】:

我对 python 很陌生。对于一个练习,我正在从 csv 文件中读取数据并将其存储在列表中。在访问列表中的元素并将它们存储为变量之后遇到问题。

文件中包含的数据将是一个ID,后跟两组坐标

ID, x1, y1, x2, y2

我需要能够从我的列表中提取数据,以便以后用于计算。希望循环遍历列表以计算多行。

感谢任何帮助!

干杯

【问题讨论】:

  • 欢迎 Jakeb 加入 Stack Overflow。请阅读how to ask。举一个最小的例子,并展示你到目前为止所做的尝试。 搜索本网站上的其他问题。如果没有这个,您当前的问题将不会得到太多的输入。

标签: python arrays list loops csv


【解决方案1】:

您应该使用csv

with open('/path/to/file.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        ID, x1, y1, x2, y2 = row

【讨论】:

  • 谢谢伙计,帮了大忙。如果数据有标题行,我可以跳过第一行吗?还是从阅读器中删除该行最简单?
  • 要跳过第一行,在for循环之前输入next(reader)
【解决方案2】:

一种方法是在字典中收集您的数据(也许 id 字段可以是键)并收集该特定 ID 的所有坐标。

这是一种这样的方法:

import csv
from collections import defaultdict

data = defaultdict(list)

with open('your_file.csv') as f:
   reader = csv.reader(f)
   next(reader) # skips the header row
   for row in reader:
     data[row[0]].append(((row[1],row[2]),(row[3],row[4])))

根据您的评论:

然后我将如何访问这些值来计算以下内容: sqrt((x2-x1)**2 + (y2-y1)**2) 对于两行中的每一行(示例 1 和 Example2) 包含在字典中?

您可以在读取文件时进行计算,并将结果存储为id 值:

for row in reader:
    id, x1, y1, x2, y2 = row
    # We have to convert the numbers from a string to floats for the calculation
    result = sqrt(float(x2)-float(x1))**2 + (float(y2)-float(y1))**2
    data[id].append(result)

然后,您可以打印结果:

for id, results in data.iteritems():
    print('For ID: {}'.format(id))
    for row, result in enumerate(results):
        print('\t{} - {}'.format(row+1, result))

【讨论】:

  • 谢谢伙计。所以代码将数据放入字典:{'Example1': [(('2', '3'), ('2', '15')], 'Example2': [(('0', '0'), ('10', '20')]} 然后我将如何访问这些值以计算以下内容:sqrt((x2-x1)**2 + (y2-y1)**2) 字典中包含的两行(Example1 和 Example2)中的每一行?
  • 嗯,首先您必须根据您拥有的数据类型将数字(它们是字符串)转换为整数/浮点数。为此,您只需修改阅读器,例如data[row[0]].append(((float(row[1]),float(row[2])),(float(row[3]),float(row[4]))));然后简单地遍历字典并进行计算; for tag, values in data.iteritems():;或者您可以在循环本身中进行计算。
猜你喜欢
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 2021-12-05
  • 2021-10-04
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 2018-02-15
相关资源
最近更新 更多