2013-10-20 150 views
0

我对python有点新,我有一个问题。我有一大堆存储在像下面列出的名单的话:搜索列表的列表?

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

而且我有了像这样的单词列表另一个列表:

["Hello", "name"] 

我想比较是否或者第二个列表中没有列表中的任何单词,如果是这样,则将列表中的列表替换为另一个单词。在我们的例子,Helloname将被替换,像​​这样:

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

如果有人可以帮助我,将是巨大的!谢谢!我只是不确定如何访问列表元素列表。

回答

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!']] 
0

列表内涵的做法也许是最Python化/优雅的做任务的方式。

数据定义:但是,如果你喜欢就地更换方法(而不是产生一个新的列表),可以按如下方式做到这一点

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' 

如果列表很大,替换也很少,我猜这个ki nd方法更节约资源,因为就地替换比从头开始生成新列表(同时进行相同次数的迭代/比较/查找)需要更少的时间并使用更少的内存。