【问题标题】:Python filtering with "if" does not filter anything?使用“if”进行 Python 过滤不会过滤任何内容?
【发布时间】:2017-08-07 11:39:41
【问题描述】:

我有一个包含二维列表的列表,例如,records[a][b] 将是其中的一个值。有一些标准应该过滤它。我使用了“for”和“if”的组合来做到这一点,它奏效了。然后必须添加一些额外的标准来过滤掉具有坐标值的点,这些点在当前迭代点周围的 10*10 单位范围内。但是我的代码编译但没有做任何事情,我不知道为什么(因为我还是 Python 的新手)。

for rec in range(1,len(records)-1):
    for koor in range(1,len(records)-1):
        if records[rec][4]+10 >= records[koor][4] >= records[rec][4]-10 and\
           records[rec][5]+10 >= records[koor][5] >= records[rec][5]-10 and\
           -1.00036 <= records[rec][8] / records[koor][8] <= 1.00036:

我认为它会做的是在定义的区域(第 3 行和第 4 行)中寻找点,并且只让它们在第 5 行的条件下通过。但它让一切都通过。为什么这不起作用?

编辑:记录[a] 形式的一个条目如下所示: ['30.12.1899 08:47:00', '7.2.2003 00:00:00', 48.82, 11.2, 4441489.89, 5410519.48, 4, 1.2, 508.55, 0.0, 0.0, 2]。

【问题讨论】:

  • 您是否故意跳过第一项和最后一项?
  • 是的,我愿意。这对其余代码来说不是问题,因此在这里也不应该很重要。
  • 使用括号确保一切都以正确的顺序完成。
  • @Chris_Rands x+10 &gt; x &gt; x-10 并非总是如此。每个rec 只会发生一次
  • @Ev.Kounis 是的,我完全看错了,之后立即删除了评论,谢谢!

标签: python list if-statement python-2.4 pyshp


【解决方案1】:

试试这个:

for rec in records[1:-1]:
    for koor in records[1:-1]:
        if rec == koor:
            # handle this some other way
        elif all(20 >= koor[x] - rec[x] + 10 >= 0 for x in [4, 5]) and abs(rec[8] / koor[8]) <= 1.00036:

【讨论】:

  • 我刚刚看到了python 2.4 标签。不确定all当时是否存在。
  • 对不起,我应该更清楚地提到这一点。我必须使用 Python-2.4.3 才能使用某个库。现在 elif 行给了我错误:“TypeError: 'int' object has no attribute 'getitem'”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
  • 2020-03-02
  • 1970-01-01
  • 2012-07-11
  • 2013-05-20
  • 2010-11-20
相关资源
最近更新 更多