'LETTER'のような文字列があります。前の文字列で文字列をチェックすると、別の文字列"LTR"があります。残りの文字は"ETE"です。Pythonのメイン文字列からこれを抽出するにはどうすればよいですか。文字の順序は、残りの文字を取得する方法に関係ありません。
質問する
223 次
8 に答える
2
ライブラリndiff()
からの使用:difflib
>>> from difflib import *
>>> list(ndiff("LETTER","LTR"))
[' L', '- E', ' T', '- T', '- E', ' R']
#so filter out letters which doesn't have '-'
>>> ''.join(x.strip('-').strip() for x in filter(lambda x:'-' in x,ndiff("LETTER","LTR")))
'ETE'
>>> ''.join(x.strip('-').strip() for x in filter(lambda x:'-' in x,ndiff("stack","tc")))
'sak'
Counter()
文字の順序が重要でない場合は、を使用できます。
>>> from collections import Counter
>>> str1="LETTER"
>>> str2="LTR"
>>> c=Counter(str1)-Counter(str2)
>>> c
Counter({'E': 2, 'T': 1})
>>> ''.join(x*c[x] for x in c)
'EET
于 2012-09-12T05:56:41.517 に答える
2
よくある質問:-) これは非常に読みやすいと思います:
s=list("LETTER")
p=list("LTR")
while p: s.remove(p.pop())
今
print("".join(s))
「ETE」を印刷
于 2012-09-12T07:13:31.373 に答える
1
#!/bin/env python
def str_diff(s, rem):
for x in rem:
pos = s.find(x)
if pos >= 0: s = s[:pos] + s[pos+1:]
return s
print str_diff("LETTER", "LTR") # ETE
print str_diff("LETTER", "LTTR") # EE
print str_diff("LETTER", "LTRxyz") # ETE
これはあなたがやりたいことをしているようです。元の順序を保持し、「削除セット」内の同じ文字の倍数に対して機能し、「削除セット」に元の文字列にない文字が含まれている場合はバーフしません。
于 2012-09-12T05:58:21.707 に答える
1
>>> x = "LETTER"
>>> for c in "LTR":
... if c in x:
... p = x.find(c)
... if p < len(x)-1:
... x = x[:p]+x[p+1:]
... else:
... x = x[:p]
...
>>> x
'ETE'
于 2012-09-12T05:44:34.680 に答える
1
これは、入力文字列の順序と重複を正しく保持する、かなり単純で読みやすいソリューションです。
def omit(s, discard):
discard = list(discard)
for c in s:
if c not in discard:
yield c
else:
discard.remove(c)
>>> ''.join(omit('LETTER', 'LTR'))
'ETE'
于 2012-09-12T05:49:16.413 に答える
1
>>> x = "LETTER"
>>> r = "LTR"
>>> y = x
>>> for c in r:
... y = y.replace(c, '', 1)
...
>>> y
'ETE'
于 2012-09-12T06:06:13.147 に答える
0
def remaining(my_string, my_string_2):
output = ""
i = 0
j = 0
while i < len(my_string) and j < len(my_string_2):
if my_string[i] != my_string_2[j]:
output += my_string[i]
else:
j += 1
i+=1
if i < len(my_string):
output+=my_string[i:len(my_string)]
return output
result = remaining("LETTER", "LTR")
print result
'ETE'を返します
于 2012-09-12T05:51:33.497 に答える
0
l1='LETTER'
l2='LTR'
occur=[]
for i in range(0,len(l1)):
if l1[i] in occur:
print l1[i]
if l1[i] in l2:
occur.append(l1[i])
else:
print l1[i]
于 2012-09-12T05:59:56.600 に答える