Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
筛选列表python,如何创建最终列表?_Python_List - Fatal编程技术网

筛选列表python,如何创建最终列表?

筛选列表python,如何创建最终列表?,python,list,Python,List,我有一个生成如下数据结构的代码: {'AttributeId': '4192', 'AttributeList': '', 'ClassId': '1014 (AP)', 'InstanceId': '0', 'MessageType': '81 (GetAttributesResponse)', 'ObjectInstance': '', 'Protocol': 'BSMIS Rx', 'RDN': '', 'TransactionId': '66', 'Sequences'

我有一个生成如下数据结构的代码:

{'AttributeId': '4192',
 'AttributeList': '',
 'ClassId': '1014 (AP)',
 'InstanceId': '0',
 'MessageType': '81 (GetAttributesResponse)',
 'ObjectInstance': '',
 'Protocol': 'BSMIS Rx',
 'RDN': '',
 'TransactionId': '66',
 'Sequences': [[],
               [1,'2013-02-26T15:01:11Z'],
               [],
               [10564,13,388,0,-321,83,'272','05',67,67,708,896,31,128,-12,-109,0,-20,-111,-1,-1,0],
               [10564,13,108,0,-11,83,'272','05',67,67,708,1796,31,128,-12,-109,0,-20,-111,-1,-1,0],
               [10589,16,388,0,-15,79,'272','05',67,67,708,8680,31,125,-16,-110,0,-20,-111,-1,-1,0],
               [10589,15,108,0,-16,81,'272','05',67,67,708,8105,31,126,-14,-109,0,-20,-111,-1,-1,0],
               [10637,40,233,0,-11,89,'272','03',30052,1,5,54013,33,103,-6,-76,1,-20,-111,-1,-1,0],
               [10662,46,234,0,-15,85,'272','03',30052,1,5,54016,33,97,-10,-74,1,-20,-111,-1,-1,0],
               [10712,51,12,0,-24,91,'272','01',4013,254,200,2973,3,62,-4,-63,0,-20,-111,-1,-1,0],
               [10737,15,224,0,-16,82,'272','01',3020,21,21,40770,33,128,-13,-108,0,-20,-111,-1,-1,0],
               [10762,14,450,0,-7,78,'272','01',3020,21,21,53215,29,125,-17,-113,0,-20,-111,-1,-1,0],
               [10762,15,224,0,-7,85,'272','01',3020,21,21,50770,33,128,-10,-105,0,-20,-111,-1,-1,0],
               [10762,14,124,0,-7,78,'272','01',3020,10,10,56880,32,128,-17,-113,0,-20,-111,-1,-1,0],
               [10812,11,135,0,-14,81,'272','02',36002,1,11,43159,31,130,-14,-113,1,-20,-111,-1,-1,0],
               [10837,42,23,0,-9,89,'272','02',36002,1,11,53529,31,99,-6,-74,1,-20,-111,-1,-1,0,54],
               [13,'2013-02-26T15:02:09Z'],
               [],
               [2,12,7,0,9,70,'272','02',20003,0,0,15535,0,0,0,0,1,100,100,-1,-1,0],
               [5,15,44,0,-205,77,'272','02',20003,0,0,15632,0,0,0,0,1,100,100,-1,-1,0],
               [7,25,9,0,0,84,'272','02',20002,0,0,50883,0,0,0,0,1,100,100,-1,-1,0]]
}
然后我将其过滤下来,列出相关值,如果长度大于等于22,我只需要序列的前2个元素。我是这样做的:

 len22seqs = filter(lambda s: len(s)>=22, data['Sequences'])
 UARFCNRSSI = []
 for i in range(len(len22seqs)):
     UARFCNRSSI.append([len22seqs[i][0], len22seqs[i][1]]) 
过滤列表的一个示例是:

 [[10564, 15], [10564, 13], [10589, 18], [10637, 39], [10662, 38], [10712, 50], [10737, 15], [10762, 14], [10787, 9], [10812, 12], [10837, 45], [3, 17], [7, 21], [46, 26], [48, 12], [49, 24], [64, 14], [66, 17], [976, 27], [981, 22], [982, 22], [983, 17], [985, 13], [517, 9], [521, 15], [525, 11], [526, 13], [528, 14], [698, 14], [788, 24], [792, 19]]
但是,我现在注意到,在这些子列表中,我需要第三个元素。 这就是:

[1,'2013-02-26T15:01:11Z'],
我需要将每个列表中长度为2的第一个元素作为第三个元素附加到这个过滤列表中,用于后面的元素。但是,当有一个长度为2的新列表时,我需要将该新值附加到后续条目中

因此,我的最后一个列表示例可能如下所示,请注意,在找到另一个长度为2的列表时,第三个元素更改为13:

[[10564, 15, 1], [10564, 13, 1], [10589, 18, 1], [10637, 39, 1], [10662, 38, 1], [10837, 45, 1], [3, 17, 13], [7, 21, 13], [46, 26, 13], etc]

我该怎么做?我是否必须使用len>=22和len=2进行两次筛选,并且仅使用len>=22进行单独筛选,因为对于长度为2的列表,我不想将元素0或1附加到最终列表中。

我会尝试使其可读:

UARFCNRSSI = []
x = None        # future "third element"; please choose a better name
for item in data["Sequences"]:
   if len(item) == 2:
       x = item[0]
   elif len(item) >= 22:
       UARFCNRSSI.append([item[0], item[1], x])

我会使用生成器来过滤您的数据:

def filterdata(sequences):
    add = []
    for item in sequences:        
        if len(item) == 2:
            add = [item[0]]
        elif len(item) >= 22:
            yield [item[0], item[1]] + add

您可以像
data=list(filterdata(data['Sequences'))

那样访问它,我想。不需要在
for
循环之前定义
x
?@namit:只是一种预防措施。你确定在第一个22元素列表之前总是会有一个两元素列表吗?谢谢,比我计划的好得多,更干净,更简单,更容易阅读。始终会有一个2元素列表首先是,数据是cli中命令的输出,在生成另一个列表之前,2元素列表必须在那里。不过你是非常正确的,在这种情况下,它是不存在的,由于输出我没有预见到它是最好的准备!哦,一个简单的更正,append接受一个参数。UARFCNRSSI.append([项目[0],项目[1],x])