Python:从nd-array列表中获取包含特定条目的数组

时间:2017-04-05 04:05:31

标签: python python-2.7

我有以下数组列表

arr= [['Activity A', 'Activity C', 'Activity C', 'Activity B'],
 ['Activity A', 'Activity C', 'jhi50265u48lj', 'gla8vnbq94vq4'],
 ['Activity D', 'Activity E', 'Activity F', 'Activity G', 'Activity C', 'Activity B']]

我只想要那些包含所有以' Activity'例如。以上列表的输出应为:

arrb=[['Activity A', 'Activity C', 'Activity C', 'Activity B'],
     ['Activity D', 'Activity E', 'Activity F', 'Activity G', 'Activity C', 'Activity B']]

我尝试这样做,但是当我单独检查项目时,它会逃避该项目

X1 = [[event for event in x1 if event.startswith('Activity')] for x1 in arr]

使用此代码我得到:

X1= [['Activity A', 'Activity C', 'Activity C', 'Activity B'],
     ['Activity A', 'Activity C'],
     ['Activity D', 'Activity E', 'Activity F', 'Activity G', 'Activity C', 'Activity B']]

我也想有效地做,因为列表可以变得非常大

还有一个数据包含与这些子数组对应的名称,例如:

names = ['p1','p2','p3']

所以当删除第二个数组时,它也应该删除' p2'来自名字数组

2 个答案:

答案 0 :(得分:3)

您可以使用内置功能all()

X1 = [i for i in arr if all([j.startswith('Activity') for j in i])]

我刚使用了列表推导,检查每个子数组中的每个元素是否与您指定的条件匹配。

答案 1 :(得分:1)

如果您想要更新名单,则无法在一行中执行此操作 试试这段代码:

X1 = []
for x1 in arr : 
    if x1 == [ event for event in x1 if event.startswith('Activity') ] :
        X1 += [ x1 ]
    else : 
        names.pop(arr.index(x1))

输出:

>>> print X1
[['Activity A', 'Activity C', 'Activity C', 'Activity B'], ['Activity D',    'Activity E', 'Activity F', 'Activity G', 'Activity C', 'Activity B']]
>>> print names
['p1', 'p3']