我正在尝试循环表示字母表的字符串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"
答案 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])