0

我对python有点陌生,我有一个问题。我有一堆单词存储在列表列表中,如下所示:

[["Hello", "my", "name", "is", "world"], ["Hello", "World!"]]

我还有另一个列表,其中包含这样的单词列表:

["Hello", "name"]

我想比较第二个列表是否有列表列表中的任何单词,如果有,请将列表列表中的单词替换为另一个单词。在我们的示例中,Hello并且name将被替换为:

[["replaced", "my", "replaced", "is", "world], ["replaced", "World!"]]

如果有人可以帮助我,那就太好了!谢谢!我只是不确定如何访问列表元素的列表。

4

2 回答 2

5

使用列表理解并设置:

>>> lis = [["Hello", "my", "name", "is", "world"], ["Hello", "World!"]]
>>> lis2 = ["Hello", "name"]
>>> s = set(lis2)           #if lis2 is huge
>>> [[x if x not in s else 'replaced' for x in item] for item in lis]
[['replaced', 'my', 'replaced', 'is', 'world'], ['replaced', 'World!']]
于 2013-10-20T04:29:56.253 回答
0

列表理解方法可能是完成任务的最 Pythonic/优雅的方式。但是,如果您更喜欢就地替换方法(而不是生成新列表),您可以按如下方式进行:

数据定义:

data = [["Hello", "my", "name", "is", "world"], ["Hello", "World!"]]
check = ["Hello", "name"]

备选方案 1:

for i, lst in enumerate(data):
    for j, word in enumerate(lst):
        if word in check: data[i][j] = 'replaced'

备选方案 2:

for i in xrange(len(data)):
    for j in xrange(len(data[i])):
      if data[i][j] in check: data[i][j] = 'replaced'

如果列表很大且替换很少,我想这种方法更节省资源,因为与从头开始生成新列表相比,进行就地替换需要更少的时间和更少的内存(同时进行相同数量的迭代/比较/查找)。

于 2013-10-20T06:14:45.820 回答