【问题标题】:Delete a data stored as a list within another list删除存储为另一个列表中的列表的数据
【发布时间】:2020-05-07 02:54:44
【问题描述】:

案例如下:我创建了一个代码,该代码基于某些标准,为我提供了每个屏幕的打印列表。

data = [[ 17,     0,     0,      0,    2.5,   'A+',    450],
        [ 18,     5,     0,      5,    2.5,   'A+',    450],
        [ 19,     9,     0,      9,    2.5,   'A+',    450],
        [ 20,     0,   2.5,      0,      5,   'A+',    450],
        [ 21,     5,   2.5,      5,      5,   'A+',    450],
        [ 22,     0,   2.5,      5,    2.5,   'B-',    400],
        [ 23,     5,   2.5,      9,    2.5,   'B-',    400],
        [ 24,     0,     5,      5,      5,   'B-',    400]] 

pairs =  []

for i in range(len(data)):
    for j in range(len(data)):
        if data[i][3] == data[j][1] and data[i][4] == data[j][2]:
            pairs.append([data[i][0], data[j][0]])
#        if data[i][5] == 'B-' and data[i][5] == data[i+1][5]:
#            pairs.append([data[i][0], data[j][0]])            
print(pairs)

但现在我想删除 - 在这种情况下 - 包含对 [22, 23] 的列表,因为它满足 2 个条件:

  • 首先是2个连续的数字。
  • 第二个是两者都是'B-'类型(data [i] [5] = 'B-')

我只想剔除那些同时满足这两个条件的,列表是这样的(为了说明目的):

[[17, 20], [17, 22], [18, 21], [18, 23], [20, 24], [22, 21]]

我尝试使用另一个条件创建,其中包含了提到的点,但我有索引错误,我认为有一些方法可以纠正这个问题,非常感谢你的帮助。问候。

【问题讨论】:

  • 您必须提供有关您的条件的更多详细信息。两个连续的数字是什么意思?您是只寻找 B- 还是要检查所有内容?
  • 你的第一栏总是在增加吗?
  • 是的,@iamvegan。

标签: python python-3.x list for-loop


【解决方案1】:

如果您稍微更改注释掉的代码,您应该会得到您所要求的:

for i in range(len(data)):
    for j in range(len(data)):
        if data[i][3] == data[j][1] and data[i][4] == data[j][2]:
            if (not (data[i][5] == data[j][5] == 'B-')) and data[i][0]+1 != data[j][0]:
                 pairs.append([data[i][0], data[j][0]])     

print(pairs)       

【讨论】:

  • 出于某种原因,我觉得not (data[i][5] == data[i+1][5] == 'B-') 会更好读。
猜你喜欢
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
相关资源
最近更新 更多