1

私は次のリストを持っています:

list1 = ['john mayer', 'elizabeth taylor', 'steven barber','jennifer richards']
list2 = ['john','jennifer']

list1とlist2を比較し、名が一致するためTRUEを返します。list2 ..でフルネームが利用できる場合は、設定された交差を使用してこの作業を行うことができることを知っていますが、そうではありません。セット交差の正規表現マッチングバージョンはありますか

編集:はい、リストがある場合、上記の例の結果はtrueになるはずです3

list3 = ['jack','jennifer']
list1-list2 : TRUE
list2-list3 : FALSE

EDIT2:私は私の元の投稿ではあまり明確ではなかったと思います。list2またはlist3では、名とフルネームを組み合わせることができます

list4 = ['john mayer', 'jennifer']
list1-list4 : TRUE
4

5 に答える 5

1

list1あなたはこのようから名のセットを作ることができます

>>> {x.split()[0] for x in list1}
set(['john', 'jennifer', 'elizabeth', 'steven'])

このようなさまざまな設定操作を行うことができます

>>> list2 = ['john','jennifer']
>>> set(list2).difference(x.split()[0] for x in list1)
set([])        # ie False
>>> list3 = ['jack','jennifer']
>>> set(list3).difference(x.split()[0] for x in list1)
set(['jack'])  # ie True

あなたが本当にboolsを必要とするならば...

>>> bool(set(list2).difference(x.split()[0] for x in list1))
False
>>> bool(set(list3).difference(x.split()[0] for x in list1))
True

またはその逆...

>>> bool(not set(list2).difference(x.split()[0] for x in list1))
True
>>> bool(not set(list3).difference(x.split()[0] for x in list1))
False

新しいlist4テストケースの場合

>>> list4 = ['john mayer', 'jennifer']
>>> {x.split()[0] for x in list1}.union(list1) > set(list2)
True
>>> {x.split()[0] for x in list1}.union(list1) > set(list3)
False
>>> {x.split()[0] for x in list2}.union(list2) > set(list3)
False
>>> {x.split()[0] for x in list1}.union(list1) > set(list4)
True
于 2012-04-11T03:45:31.503 に答える
1
def first_name_is_in(first_names, full_names):
    for name in first_names:
        for full_name in full_names:
            if full_name.startswith("%s " % (name,)):
               return True
    return False
于 2012-04-11T03:36:49.057 に答える
1
>>> set(list2).issubset(ele.split(' ')[0] for ele in list1)
True

jamylakの指摘のおかげで、元の投稿と同じように[。]を削除しました。

于 2012-04-11T03:50:37.590 に答える
0

@gnibblerが提案したように、セットを作成するのが最善なので、それを使用するように変更しました。

>>> first_names = {name.split()[0] for name in list1}
>>> all(x in first_names for x in list2)
True
于 2012-04-11T03:41:09.247 に答える
0
full_names = ['john mayer', 'elizabeth taylor', 'steven barber','jennifer richards']
first_names = ['john','jennifer']

all((any(full.split()[0]==first for full in full_names) for first in first_names))
于 2012-04-11T03:35:56.883 に答える