2017-07-04 10 views
2

2つの文字列リストを比較し、共通の文字列を見つけて共通の文字列を新しいリストに格納したいと思います。例えば2つの文字列リストをお互いに比較するPython

は:

my_list1=['  4,   -40.,   -12.\n', 
'  5,   -40.,   -15.\n', 
'  6,   -40.,   -18.\n', 
'  7,   -40.,   -21.\n', 
'  8,   -40.,   -24.\n', 
'  9,   -40.,   -27.\n', 
'  14,   -30.,   -30.\n', 
'  15,   -28.,   -30.\n'] 

my_list2=['49', 
'50', 
'51', 
'10', 
'53', 
'54', 
'55', 
'56', 
'57', 
'58', 
'59', 
'60', 
'6162', 
'15', 
'64', 
'65', 
'66'] 

私は何をしたいmy_list1内の文字列の先頭にmy_list2の文字列のそれぞれを比較しています。たとえばmy_list1については

[ '15, -28., -30.\n']に私は、引数として項目のタプルを取ることができますあなたがstr.startswith使用することができ、すべての一般的な文字列

+1

これはところでリストの交差点を取得と呼ばれています。 Pythonにはすでにこのための組み込み関数が用意されています。 – Carcigenicate

+0

[NLTKでストップワードを削除する](https://stackoverflow.com/questions/19130512/stopword-removal-with-nltk) –

答えて

3

を保存しようとしている新しいリストをしたいmy_list2から'15'含まれています。最初のリストの中左ストリップ各アイテムとアイテムSTARTSWITHをかどうかをチェック第二のリスト内の文字列のいずれか:

t = tuple(my_list2) 
lst = [x for x in my_list1 if x.lstrip().startswith(t)] 
print lst 
# ['  15,   -28.,   -30.\n'] 
+0

「startswith()」をうまく利用している可能性があります。 +1。 'any()'で遅くなるのでしょうか? 'lst = [x for my_list1(x.lstrip()。startswith(y)for my_list2)]'のように。それは同じものでなければなりません、そうですか? –

+0

@ Ev.Kounisいいえ、それはできません。単一の呼び出し(paramsのタプルであるにもかかわらず)は、** genの '* n'呼び出しよりもはるかに高速です。 exp **は 'any'で囲まれています。 –

0
my_list1_new = [i.strip().split(",")[0] for i in my_list1 ] 
for i in my_list2: 
    if i in my_list1_new: 
     print(my_list1[my_list1_new.index(i)]) 
関連する問題