您可以使用一个dict
计数器(在这种情况下,它也可以是一个列表)。defaultdict
很方便:
from collections import defaultdict
returns = defaultdict(int)
count = 0
for p in lasfile.File(inFile, None, 'r'):
count += 1
returns[p.return_number] += 1
编辑:我不确定 DSM 是否发布了带有Counter
示例的单独答案,所以我将在这里回复 OP 的问题:
@DSM:我可以结合计数器吗?例如:如果我想同时计算 p.return_number 和 p.scan_angle – Gianni
Counter
将计算你给它的迭代中的值。迭代应该是同质的。例如,如果scan_angle
s 可以采用 、 等值1
,2
那么您不能Counter
对两者都使用相同的值并获得正确的结果。如果这些值不重叠,您可以获得正确的结果,但您的代码将令人困惑且难以理解。我建议使用两个Counter
's:一个用于return_number
s,一个用于scan_angle
's。您可以使用相同的循环轻松地填充两者(并且相同的代表defaultdict
's),但如果您想将创建和填充两个Counter
's 压缩到一个语句中,您将需要类似
from collections import Counter
rnc, sac = map(Counter,
zip(*((p.return_number, p.scan_angle) for p in lasfile.File(inFile,None,'r'))))
请注意,至少在 Python 2 上它会生成一个列表,因此所有数据将在某个时间点同时保存在内存中。
然而,更简单的方法是:
使用两个defaultdict
s:
returns, angles = defaultdict(int), defaultdict(int)
for p in lasfile.File(inFile, None, 'r'):
returns[p.return_number] += 1
angles[p.scan_angle] += 1
count += 1
Counter
或在文件的两个不同读取中填充两个s:
fp = lasfile.File(inFile, None, 'r')
returns = Counter(p.return_number for p in fp)
fp = lasfile.File(inFile, None, 'r')
angles = Counter(p.scan_angle for p in fp)