2016-03-26 18 views
-4

ある文字列から文字を削除する関数を作成しようとしています。別のPythonに存在する場合、ある文字列内の文字を削除する方法

L1 = [ 'A'、 'B'、 'C​​'、 'D'、 'E'、 'F']を

L2 = [ 'B'、 ':例えば

A ' 'D'、 'F']

を '私はそれが[返すようにしたい]

' C」、' E Iは、関数内でこれを持っていると思います。ご協力ありがとうございました!ここで

+3

を動作するはずです。 –

+0

文字の順序を保持する必要がありますか? –

+1

あなたの質問を明確にしてください:データ文字列ですか、それとも単一の文字列のリストですか?また、あなた自身のコードの試みを質問に載せるべきです。 –

答えて

1

は、単純なリストカンプ・アプローチです:ここで

def f(l1, l2): 
    return [x for x in l1 if x not in l2] 

l1 = ['a', 'b', 'c', 'd', 'e', 'f'] 
l2 = ['b', 'c', 'e'] 
print(f(l1, l2)) 
>>> ['a', 'd', 'f'] 

は(あなたが言うことができるフィルタを使用して)より少ない。

f = lambda l1, l2: list(filter(lambda elem: elem not in l2, l1)) 

あなたは元のリストを変更したい場合は、次の

def f(l1, l2): 
    for elem in l2: 
     l1.remove(elem) 
    return l1 

l1 = ['a', 'b', 'c', 'd', 'e', 'f'] 
l2 = ['b', 'c', 'e'] 
print(l1) # Prints ['a', 'b', 'c', 'd', 'e', 'f'] 
print(f(l1, l2)) # Modifies l1 and returns it, printing ['a', 'd', 'f'] 
print(l1) # Prints ['a', 'd', 'f'] (notice the list has been modified) 

文字列(質問に投稿されたリストではない)が必要な場合は、別のラムダ:

s1 = 'abcdef' 
s2 = 'bce' 
# Both of the below work with strings and lists alike (and return a string) 
fn = lambda s1, s2: "".join(char for char in s1 if char not in s2) 
# Or, using filter: 
fn = lambda s1, s2: "".join(filter(lambda char: char not in s2, s1)) 

print(fn(s1, s2) 
>>> 'adf' 
-1

あなたは、文字列を述べ、すべてのlist comprehension

>>> l1 = ['a', 'b', 'c', 'd', 'e', 'f'] 
>>> l2 = ['b', 'c', 'e'] 
>>> l3 = [i for i in l1 if i not in l2] 
>>> l3 
['a', 'd', 'f'] 
-1

ファーストを使用できますが、リストを掲載しました。私はここに両方の​​機能を掲載します。

def string_difference(string1,string2) 
    a = list(string1) 
    b = list(string2) 
    for i in b: 
     while i in a: 
      a.remove(i) 

    return "".join(a) 

def list_difference(list1,list2) 
    a = list1 
    b = list2 
    for i in b: 
     while i in a: 
      a.remove(i) 

    return a 

これらの関数は、リストと文字列の元の順序を保持します。

+0

私の答えは間違っていますか?それは正確に質問の著者が望むものです。 – Alven

0

これは、単一の文字列ではなく、文字列のリストです

def subtract_list(list1, list2): 
    return list(set(list1) - set(list2)) 
+0

FWIWの場合、 '-'演算子ではなく' set.difference'メソッドを使うほうが少し効率的です(より多くの型付けが可能です): '' '.join(set(' abcdef ')。difference(' bce ') ) '。 –

+0

@ PM2Ringあなたの提案をありがとう。これについていくつか説明をしていただけますか?私が知る限り、戻り値としてリストや文字列を期待するかどうかは不明です。 – Querenker

+0

いいえ、入力データまたは出力データのタイプがどのようなものかとはっきりしていないし、OPが私が質問を明確にしないように投票したことを明確にしていないためです。 –

関連する問題