替换python中重复项列表中的一个特定重复项

Posted

技术标签:

【中文标题】替换python中重复项列表中的一个特定重复项【英文标题】:Replacing ONE specific duplicate in list of duplicates in python 【发布时间】:2017-01-25 21:35:49 【问题描述】:

我有一个单词列表,其中一些是重复的。

L = [['I'], ['like'], ['candy'], ['end'], ['do'], ['you'], ['end'], ['okay'], ['end']]

我要做的是缩短列表,使其在第一个 ['end'] 之后结束。我试图找到第二个 ['end'] 的索引并将其替换为另一个单词,然后告诉程序只打印出该列表直到该单词的索引。

所以输出应该是:

L = [['I'], ['like'], ['candy'], ['end'], ['do'], ['you'], ['new_word']]

如何更改这些重复的单词之一?我已经尝试过str.replace() 方法并使用其索引引用特定的重复项,但这会更改所有重复项。我该怎么办?这是我在python中的第一个主要项目,所以我是初学者。

【问题讨论】:

为什么['okay'] 会从您的最终列表中消失? 也许从 python 教程的list 部分开始? (不想轻视,但您似乎陷入了非常基本的操作,而 SO 并不最适合这类问题。) 我不介意用漂亮的 oneliners 回答简单的问题并从中获得大量的支持,但这里只是不清楚。 【参考方案1】:
def see_two_end(l, stop_word, new_word):
    count = 0
    for sublist in l:
        if sublist[0] == stop_word:
            count += 1
        if count > 1:
            break
        yield sublist
    yield [new_word]

l = [['I'], ['like'], ['candy'], ['end'], ['do'], ['you'], ['end'], ['okay'], ['end']]

newlist = list(see_two_end(l, 'end', 'new_word'))
#[['I'], ['like'], ['candy'], ['end'], ['do'], ['you'], ['new_word']]

如果您愿意,您可以轻松地将 see_two_end 设为返回列表列表而不是生成器的函数。

【讨论】:

以上是关于替换python中重复项列表中的一个特定重复项的主要内容,如果未能解决你的问题,请参考以下文章

替换 2D numpy 数组中的连续重复项

如何在不删除先前相同值的情况下选择具有重复项的列表中的特定数字?

使用 Python 删除对象列表中的重复项

Python统计列表中的重复项出现的次数

Python统计列表中的重复项出现的次数的方法

Python统计列表中的重复项出现的次数的方法