搜索列表列表?

时间:2013-10-20 04:27:34

标签: python string list replace

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

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

我有另一个列表,其中包含如下所示的单词列表:

["Hello", "name"]

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

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

如果有人能帮助我那会很棒!谢谢!我只是不确定如何访问列表元素列表。

2 个答案:

答案 0 :(得分: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!']]

答案 1 :(得分: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'

如果有大量列表和少量替换,我想这种方法更具资源效率,因为就地替换比从头开始生成新列表所花费的时间更少,占用的内存更少(同时进行相同数量的迭代) /比较/查找)。