我的代码已经停留了一段时间了,我不知道它为什么会像它一样返回。
guess = 'a'
word = ['a', 'b', 'c']
board = ['_', '_', '_']
board = list(map(lambda x: guess if word[board.index(x)] == guess else x, board))
print(board)
返回
['a', 'a', 'a']
我的目标是回归
['a', '_', '_']
我之前的解决方案是循环遍历列表,索引值越来越大,并根据猜测单独检查单词中的每个条目,并在同一索引处替换单板列表,但我觉得有一个使用lambda
更加简洁和pythonic的方式,我只是无法得到它。
答案 0 :(得分:5)
您可以使用列表理解:
guess = 'a'
word = ['a', 'b', 'c']
new_word = [i if i == guess else "_" for i in word]
这会给你:
["a", "_", "_"]
答案 1 :(得分:5)
问题是list.index
method会返回第一场比赛的索引:
list.index(x[, start[, end]])
在值为x 的第一项的列表中返回从零开始的索引。如果没有这样的项目,则引发
ValueError
。 [...]
如果您对解决方案也感兴趣:您可以简单地迭代word
和board
:
guess = 'a'
word = ['a', 'b', 'c']
board = ['_', '_', '_']
board = list(map(lambda x, y: guess if x == guess else y, word, board)) # 3 parameters!
print(board) # ['a', '_', '_']
鉴于你想要"替换"你也可以使用正常的for
- 循环。这样你就可以避免一直创建和丢弃列表:
for idx, char in enumerate(word):
if char == guess:
board[idx] = char
答案 2 :(得分:3)
你可能正在寻找这样的东西:
board=map(lambda x: x[1] if x[1] == guess else board[x[0]], enumerate(word))
答案 3 :(得分:0)
您可以使用答案中提到的list
理解,但在您的代码board
中,每次猜测都会重置loop
。我猜你想要跟踪猜测,直到所有字母都被猜到(或直到猜测次数),所以你的list
应该有一个临时的loop
,然后word = ['a', 'b', 'c']
board = ['_', '_', '_']
tries = 0
while tries != 3:
guess = raw_input("Enter a guess: ")
tmp = [x if x == guess else '_' for x in word]
for i in xrange(len(board)):
if board[i] == '_':
try:
board[i] = tmp[i]
except IndexError:
pass
print(board)
if '_' not in board:
print('Solved!')
break
tries += 1
if tries == 3:
print('Not solved!')
通过董事会来添加新的猜测(如果找到),如:
H2OKMeansEstimator