【问题标题】:Replace list object based on indexes of another list (Python)根据另一个列表的索引替换列表对象(Python)
【发布时间】:2013-10-05 06:29:13
【问题描述】:

我正在编写一个与用户扮演刽子手的程序。目前,它有两个列表:一个包含单词的可变版本,另一个包含用户猜测的“状态”。所以如果这个词是“python”:

word = ["p", "y", "t", "h", "o", "n"]

status = []
for number in range(0, len(word)):
    status.append("_")

print(status)
>>> ["_", "_", "_", "_", "_", "_"]

我的计划是在每个input("Enter guess: ") 之后,我可以根据猜测在“单词”列表中的索引将“_”替换为猜测。 (这有意义吗?!)

然后,在每次猜测之后,我可以print("".join(status)),这样用户就可以看到他们的进展情况。

我做了一些研究,发现了 list.index(x) 方法,但我读到它返回值为 x 的第一项的索引。

这是我希望程序如何工作的示例:

word = ["p", "y", "t", "h", "o", "n"]
status = ["_", "_", "_", "_", "_", "_"]

Enter guess: t
_ _ t _ _ _

Enter guess: n
_ _ t _ _ n

等等。等等(不用担心循环等,因为我已经把它搞定了:)我只是不确定如何根据另一个列表的索引来编辑一个列表!)

我不打算修改'word',所以最后我可以比较'status'和'word'来检查用户是否赢了,但我愿意接受所有建议! :D

谢谢!!

【问题讨论】:

  • “我 [..] 遇到了 list.index(x) 方法,但我读到它返回值为 x 的第一项的索引。” - 这正是你所需要的。您可以循环查找所有事件。向我们展示您的代码。

标签: python list indexing


【解决方案1】:

您可以使用列表推导获取值为x 的所有索引:

indices = [i for i, elem in enumerate(word) if elem == x]

所以你会:

>>> word = ["p", "y", "t", "h", "o", "n"]
status = ["_", "_", "_", "_", "_", "_"]
>>> >>> word
['p', 'y', 't', 'h', 'o', 'n']
>>> status
['_', '_', '_', '_', '_', '_']

然后,用户进行猜测,假设我们有guess = 't',那么:

>>> guess = 't'
>>> indices = [i for i, x in enumerate(word) if x == guess]
>>> indices
[2]

然后我们改变状态列表以显示找到的索引:

for i in indices:
    status[i] = guess

然后我们可以将status显示为字符串:

print(' '.join(status))
_ _ t _ _ _

【讨论】:

  • 太好了!谢谢。我一直在列表推导方面遇到麻烦......但我又只花了 5 周的时间使用 Python :)
【解决方案2】:

这应该可以工作:

word = ['p','y','t','h','o','n']
user_letter = raw_input("Enter a letter\n")

status = ['_' for i in xrange(len(word))]
for index, ltr in enumerate(word):
     if ltr == user_letter:
         status[index] = user_letter

这里假设user_letter 的长度为 1。当然,您可以自己确保这一点。

【讨论】:

    猜你喜欢
    • 2021-05-13
    • 2013-06-25
    • 2021-11-19
    • 2018-11-06
    • 2023-02-23
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多