【问题标题】:How to find index of an element in Python list? [duplicate]如何在 Python 列表中查找元素的索引? [复制]
【发布时间】:2011-05-05 02:00:32
【问题描述】:

可能重复:
How to find positions of the list maximum?

作业中的一个问题: 定义一个函数censor(words,nasty),它接受一个单词列表,并且 用单词 CENSORED 替换所有出现在 nasty 中的单词,并且 返回被删减的单词列表。

>>> censor([’it’,’is’,’raining’], [’raining’])
[’it’,’is’,’CENSORED’]

我看到这样的解决方案:

  1. 找到nasty的索引
  2. 替换匹配该索引的单词 与"CENSORED"

但我一直在寻找索引..

【问题讨论】:

  • @mart:OP 说这是作业。
  • @Silent:好的,如果是自愿的话,抱歉。请参阅我的评论中关于附加到@z4y4ts 答案的元标记的链接。
  • @martineau:嗯,家庭作业不在那个列表中,它看起来确实很活跃。我还应该指出,我非常鄙视那些源自我们公司霸主的误导性社会工程尝试。
  • @SilentGhost:你读过@Aaronut 写的“元标签是一个问题的原因是它们没有描述问题的内容”的部分吗?这就是为什么他们被看得很差的症结所在。您认为有多少普通用户曾经搜索过“作业”标签——那有什么好处呢?
  • @Silent: [homework] is 在那个列表中:“homework 标签和其他所谓的“元”标签一样,现在不鼓励使用。” meta.stackexchange.com/questions/10811/…

标签: python list indexing


【解决方案1】:

您可以使用.index 方法找到list 的任何元素的索引。

>>> l=['a','b','c']
>>> l.index('b')
1

【讨论】:

  • 除非列表中有两种情况下的'b',在这种情况下你只会得到第一个。这可能是这个问题的问题。
  • 不敢相信我必须一直向下滚动才能找到这个......
【解决方案2】:

其实这里不必操作索引。只需遍历words 列表并检查该单词是否在nasty 中列出。如果将'CENSORED' 附加到结果列表中,则附加单词本身。

或者您可以参与list comprehensionconditional expression 以获得更优雅的版本:

【讨论】:

  • 为别人解决作业问题被认为是非常不礼貌的行为。它否定了学习效果,对其他学生不公平,并且惹恼了导师。
  • 糟糕,很抱歉,我以前从未见过这些作业问题。去掉代码只留下cmets可以吗?
  • @Konrad Rudolph:考虑到元标签(如“作业”)现在不鼓励使用,这可能会变得更加困难——请参阅The Death of Meta Tags。当然有权衡,但总的来说我个人倾向于同意这个推理。
  • 绝对。我们总是感谢您的帮助,包括家庭作业问题。
【解决方案3】:

您的方法可能有效,但过于复杂。

Python 允许使用非常简单的语法来检查列表中是否包含某些内容:

censor = [ 'bugger', 'nickle' ]
word = 'bugger'
if word in censor: print 'CENSORED'

使用这种方法,只需遍历您的单词列表并测试每个单词是否在 censor 列表中。

要遍历您的单词列表,您可以使用for 循环。由于您可能需要修改当前单词,请使用索引,如下所示:

for index in len(words)):
   print index, words[index]

现在您需要做的就是将两个代码片段放在一起。

【讨论】:

  • ... 然后通过将上述 O(#words * #nastywords) 算法转换为 O(#words) 来获得一些布朗尼分数。 :)
  • @janneb:这确定有效吗?我所能达到的预期(!)时间 O(#words + #censor) - 通过将审查的单词列表转换为set
  • 嗯,是的,你是对的。我的观点是,通过使用您指出的集合(或旧版 python 版本的 dict),可以将这个二次算法转换为线性算法。
【解决方案4】:

您可以使用方便的内置enumerate() 函数来逐步浏览列表中的项目。例如:

def censor(words, nasty):
    for i,word in enumerate(words):
       if word...

【讨论】:

    猜你喜欢
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 2016-04-17
    • 2020-12-05
    • 2019-11-16
    • 2021-07-16
    相关资源
    最近更新 更多