无法从Python中删除字符串中的字符

时间:2015-02-01 22:22:22

标签: python regex string

我正在尝试循环表示字母表的字符串x,同时将这些值与包含某些特定字母的列表进行比较。

如果列表和字符串x都匹配,则应从字符串x中删除特定字符。这是一段非常简单直接的代码。我已经将.replace方法跟到了T.但是,当我运行代码时,字符串x仍然显示为原始状态。

这是我的工作代码:

lettersGuessed = ['e', 'i', 'k', 'p', 'r', 's']

x = 'abcdefghijklmnopqrstuvwxyz'

for i in range(len(x)):
    if x[i] in lettersGuessed:
        x.replace(x[i],'')

print x  "Available Letters"

4 个答案:

答案 0 :(得分:3)

尝试以下

x = x.replace(x[i], '')

您不会将更改后的值重新分配回原始字符串。

答案 1 :(得分:1)

简单的错误。

x = x.replace(x[i],'')

答案 2 :(得分:0)

您可以使用连接和生成器表达式:

print("Available Letters","".join(ch if ch not in lettersGuessed else "" for ch in x  ))

使用循环,只需遍历lettersGuessed中的字符并每次更新x:

 for ch in lettersGuessed:
     x = x.replace(ch,'') # assign the updated string to x


print("Available Letters",x)

或者迭代x是相同的逻辑:

for ch in x:
    if ch in lettersGuessed:
       x =  x.replace(ch,'')

字符串不可变,因此您无法更改字符串。您需要将x重新分配给使用x.replace(ch,'')

创建的新字符串
In [1]: x = 'abcdefghijklmnopqrstuvwxyz'    
In [2]: id(x)
Out[2]: 139933694754864    
In [3]: id(x.replace("a","foo")) # creates a new object
Out[3]: 139933684264296
In [7]: x 
Out[7]: 'abcdefghijklmnopqrstuvwxyz' # no change     
In [8]: id(x)
Out[8]: 139933694754864 # still the same object

答案 3 :(得分:0)

您可以使用python集来实现此目的:

a = ['a','b','d']
b = "abcdefgh"
print ''.join(sorted(list(set(b) - set(a))))

输出:

cefgh Available letters

或使用列表推导来实现这一目标:

a = ['a','b','d']
b = "abcdefgh"
print ''.join([x for x in b if x not in a])