比较Python中

时间:2018-04-23 10:35:13

标签: python list nested-lists

我有一个这样的嵌套列表:

[['Asan', '20180418', 'A', '17935.00'],
 ['Asan', '20180417', 'B', '17948.00'],
 ['Asan', '20180416', 'C', '17979.00'],
 ['Asan', '20180416', 'D', '17816.00'],
 .
 .
 .
 .
 ['Asan', '20180415', 'N', '18027.00']]

我需要对每个列表中的第3个元素进行一些计算,并使用前面的那个,例如:

if (A/B) > 0.05: ....
if (B/C) > 0.05: ....
if (C/D) > 0.05: ....
.
.
if (N-1/N) == 1: ....

如果条件不满足,我会弹出该列表。

我如何处理这个问题,以及最快速和最快速的方法。

编辑: 让我澄清一下: A和B等是FLOATS,我只是将它们命名为A,B,...以便更好地理解。 if语句应该找到A是否比前一个浮点B大多少。

4 个答案:

答案 0 :(得分:1)

zip可以轻松实现成对比较:

l = [['Asan', '20180418', 'A', '17935.00'],
     ['Asan', '20180417', 'B', '17948.00'],
     ['Asan', '20180416', 'C', '17979.00'],
     ['Asan', '20180416', 'C', '200.00'],
     ['Asan', '20180416', 'D', '17816.00']]

new_list = []

for x, y in zip(l, l[1:]):
    if x[2] == y[2]:
        new_list.extend([x, y])

print(new_list)
# [['Asan', '20180416', 'C', '17979.00'],
#  ['Asan', '20180416', 'C', '200.00']]                                          

修改

如果'A''B''C' ..是float s,那么要检查您需要的条件,您可以替换上例中的条件。如果满足这个条件就做任何事情。

答案 1 :(得分:0)

你的意思是这样吗?

l = [['Asan', '20180418', 'A', '17935.00'],
     ['Asan', '20180417', 'B', '17948.00'],
     ['Asan', '20180416', 'C', '17979.00'],
     ['Asan', '20180416', 'C', '200.00'],
     ['Asan', '20180416', 'D', '17816.00']]

last_seen = l[0]
new_list = []

for r in l[1:]:
    if r[2] == last_seen[2]:
        new_list.append(last_seen)
        new_list.append(r)
    last_seen = r


print(new_list)

给出了:

[['Asan', '20180416', 'C', '17979.00'], ['Asan', '20180416', 'C', '200.00']]

答案 2 :(得分:0)

由于您需要测试顶部列表中每个元素的条件,您需要迭代它。

由于无法计算第一个元素的条件(没有'在'元素之前),我们可以从索引1而不是0开始。

子列表中的第3个元素可以通过它的索引引用。 我们可以通过减少索引来获取我们现在看到的子列表之前的子列表。

由于循环,它不会很快,但最pythonic方式将是一个oneline循环。

new_list = [l[i] for i in range(1, len(l)) if float(l[i][3])/float(l[i-1][3]) > 0.05]
#new_list = [['Asan', '20180417', 'B', '17948.00'], ['Asan', '20180416', 'C', '17979.00'], ['Asan', '20180416', 'D', '17816.00']]

由于可读性,我会使用多行for循环。

new_list = []
for i in range(1, len(l)):
    if float(l[i][3])/float(l[i-1][3]) > 0.05:
       new_list.append(l[i])

答案 3 :(得分:-1)

试试这个

for i in range(len(l)):
    if l[i][2] <Operator> l[i + 1][2] <Condtion> exp/value:
        Do something here