我对python有点新,我有一个问题。我有一堆单词存储在列表列表中,如下所示:
[["Hello", "my", "name", "is", "world"], ["Hello", "World!"]]
我有另一个列表,其中包含如下所示的单词列表:
["Hello", "name"]
我想比较第二个列表是否在列表列表中有任何单词,如果是,请用另一个单词替换列表列表中的单词。在我们的示例中,Hello
和name
将被替换为:
[["replaced", "my", "replaced", "is", "world], ["replaced", "World!"]]
如果有人能帮助我那会很棒!谢谢!我只是不确定如何访问列表元素列表。
答案 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'
如果有大量列表和少量替换,我想这种方法更具资源效率,因为就地替换比从头开始生成新列表所花费的时间更少,占用的内存更少(同时进行相同数量的迭代) /比较/查找)。