我有以下数组列表
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'来自名字数组
答案 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']