Nak*_*kle 5 python lambda list
我已经被困在我的代码的一行上了一段时间,我不知道为什么它会像它一样返回.
guess = 'a'
word = ['a', 'b', 'c']
board = ['_', '_', '_']
board = list(map(lambda x: guess if word[board.index(x)] == guess else x, board))
print(board)
Run Code Online (Sandbox Code Playgroud)
这回来了
['a', 'a', 'a']
Run Code Online (Sandbox Code Playgroud)
而我的目标是回归
['a', '_', '_']
Run Code Online (Sandbox Code Playgroud)
我以前的解决方案是循环遍历列表,索引的值越来越大,并根据猜测单独检查单词中的每个条目,并在同一索引处替换单板列表,但我觉得有一个更简洁的pythonic方式使用lambda,我只是不能得到它.
您可以使用列表理解:
guess = 'a'
word = ['a', 'b', 'c']
new_word = [i if i == guess else "_" for i in word]
Run Code Online (Sandbox Code Playgroud)
这会给你:
["a", "_", "_"]
Run Code Online (Sandbox Code Playgroud)
问题是返回第一个匹配的索引的list.index方法:
list.index(x[, start[, end]])在值为x的第一个项的列表中返回从零开始的索引.
ValueError如果没有这样的项目,则提高a .[...]
如果您对解决方案也感兴趣:您可以简单地迭代两者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', '_', '_']
Run Code Online (Sandbox Code Playgroud)
鉴于你想要"替换",你也可以使用普通的for-loop.这样您就可以避免一直创建和丢弃列表:
for idx, char in enumerate(word):
if char == guess:
board[idx] = char
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |