如果字符不在列表中,则从字符串中删除字符...?

时间:2015-07-02 15:43:04

标签: python string

我一直在使用.translate()但是如果它不是列表中的某个字符,我想从字符串中删除一个字符。我不认为我正在使用“不”,但这主要是为了表明我的意思(抱歉,糟糕的方式,我知道)。字符串是

MDVFMKGLSKAKEGVVAAAEKTKQGVAEAAGKTKEGVLYVGSKTKEGVVHGVATVAEKTKEQVTNVGGAVVTGVTAVAQKTVEGAGSIAAATGFVKKDQLGKNEEGAXPQEGILEDMPVDPDNEAYEMPSEEGYQDYEPEAXX 

我想删除X.

aminoacids = ['A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R','S','T','V','W','Y']
contentjoined.translate(None, not(aminoacids))

3 个答案:

答案 0 :(得分:3)

您可以使用列表理解来获取错过的字符:

>>> contentjoined.translate(None,''.join([i for i in contentjoined if i not in aminoacids]))
'MDVFMKGLSKAKEGVVAAAEKTKQGVAEAAGKTKEGVLYVGSKTKEGVVHGVATVAEKTKEQVTNVGGAVVTGVTAVAQKTVEGAGSIAAATGFVKKDQLGKNEEGAPQEGILEDMPVDPDNEAYEMPSEEGYQDYEPEA'
>>> 

或者您可以使用set.difference

contentjoined.translate(None,''.join(set(contentjoined).difference(aminoacids)))
'MDVFMKGLSKAKEGVVAAAEKTKQGVAEAAGKTKEGVLYVGSKTKEGVVHGVATVAEKTKEQVTNVGGAVVTGVTAVAQKTVEGAGSIAAATGFVKKDQLGKNEEGAPQEGILEDMPVDPDNEAYEMPSEEGYQDYEPEA'
>>> 

但是你可以通过简单的列表理解和join来完成这项工作:

>>> ''.join([i for i in contentjoined if i in aminoacids])
'MDVFMKGLSKAKEGVVAAAEKTKQGVAEAAGKTKEGVLYVGSKTKEGVVHGVATVAEKTKEQVTNVGGAVVTGVTAVAQKTVEGAGSIAAATGFVKKDQLGKNEEGAPQEGILEDMPVDPDNEAYEMPSEEGYQDYEPEA'
>>> 

答案 1 :(得分:0)

您使用translate()代替strip()是否有特定原因?

如果您知道某个特定字符是您希望删除的,strip()是一种更简单的方式:

long_string = "MDVFMKGLSKAKEGVVAAAEKTKQGVAEAAGKTKEGVLYVGSKTKEGVVHGVATVAEKTKEQVTNVGGAVVTGVTAVAQKTVEGAGSIAAATGFVKKDQLGKNEEGAXPQEGILEDMPVDPDNEAYEMPSEEGYQDYEPEAXX" 
print long_string.strip('X')

输出:MDVFMKGLSKAKEGVVAAAEKTKQGVAEAAGKTKEGVLYVGSKTKEGVVHGVATVAEKTKEQVTNVGGAVVTGVTAVAQKTVEGAGSIAAATGFVKKDQLGKNEEGAXPQEGILEDMPVDPDNEAYEMPSEEGYQDYEPEA

答案 2 :(得分:-1)

不是一个奇特的解决方案,但如果列表上有新字符,您可以尝试将字符添加到

newString = ""
for i in range(len(oldString)):
  if oldString[i] in aminoacids:
    newString += oldString[i]