如何浏览列表中的所有元素以检查它是否与某些内容匹配

时间:2017-12-14 13:51:10

标签: python list

元组列表(让我们称之为A):

[('Hey', 'b', 'c'),
 ('Waddup', 'd', 'e'),
 ('Cutie', 'f', 'g')]

我还有另一个元组列表(列表B):

[('1', 'Hey', 'k'),
 ('2', 'Waddup', 'j'),
 ('3', 'Superman', 'h')]

我想迭代列表B以查看列表x[0]中的任何元组中的x(列表A中的B)是否存在。我已经尝试了anyall内置插件,但它没有用。

if all(x[0] not in B for x in A):
   return x[0]

基本上我应该得到的唯一值是'Cutie',因为它是列表A中每个列表中唯一不在列表B中的第0个元素。但是,我得到了该列表中的每个元素(我相信它按元素检查元素,而不是一次检查所有元素)。

编辑。让我们假设如果我的代码正常工作,它将返回x[0]。 所以,它应该只返回'Cutie'一次。相反,它返回:

'Hey'
'Hey'
'Waddup'
'Waddup'
'Cutie'
'Cutie'
'Cutie'

2 个答案:

答案 0 :(得分:1)

我可能会使用sets(下面详细说明,您也可以将其合并为一行以避免临时设置):

@Database(entities = {Country.class}, version = 5, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase{
private static AppDatabase INSTANCE;
public abstract ClassDao classDao();
public abstract SessionDao sessionDao();
public abstract SectionDao sectionDao();
public static AppDatabase getDatabase(Context context) {
    if (INSTANCE == null) {
       INSTANCE =
                Room.databaseBuilder(context, AppDatabase.class, "edumiadatabase").fallbackToDestructiveMigration()
                        .build();
    }
    return INSTANCE;
}

public static void destroyInstance() {
    INSTANCE = null;
}
}

a_0 = set(t[0] for t in A)

b_1 = set(t[1] for t in B)

{'Cutie', 'Hey', 'Waddup'}

差异只是

{'Hey', 'Superman', 'Waddup'}

如果您希望将结果作为列表,则可以执行以下操作:

a_0 - b_1

{'Cutie'}

给出了

final_res =  list(a_0 - b_1)

紧凑版本将是

['Cutie']

答案 1 :(得分:0)

这个怎么样:

>> [a[0] for a in A if all(a[0] not in b for b in B)]
['Cutie']