Python 如果嵌套列表中不存在元素,如何有效地检查和添加?
我有一个巨大的嵌套列表,其中的元素是具有以下形式的字符串:Python 如果嵌套列表中不存在元素,如何有效地检查和添加?,python,python-3.x,list,list-comprehension,Python,Python 3.x,List,List Comprehension,我有一个巨大的嵌套列表,其中的元素是具有以下形式的字符串: [[0,'+','the','+','quick','+','brown','+','fox','+','jumps','over','+','the','+','lazy','+','dog','+',908] ..., ['Now','+','is','+', 'the','+', 'time','+', 'for','+', 'all','+', 67,'+', 'men']] 但是,我发现有些元素没有+分隔符。例如,在子列表1
[[0,'+','the','+','quick','+','brown','+','fox','+','jumps','over','+','the','+','lazy','+','dog','+',908]
...,
['Now','+','is','+', 'the','+', 'time','+', 'for','+', 'all','+', 67,'+', 'men']]
但是,我发现有些元素没有+分隔符。例如,在子列表1中:
[0,'+','the','+','quick','+','brown','+','fox','+','jumps','over','+','the','+','lazy','+','dog','+',908]
在“跳跃”之间,缺少“+”。对于具有长子列表的大型嵌套列表,在没有分隔符的元素之间添加+分隔符的最有效方法是什么
预期输出应如下所示:
[[0,'+','the','+','quick','+','brown','+','fox','+','jumps','+','over','+','the','+','lazy','+','dog','+',908]
...,
['Now','+','is','+', 'the','+', 'time','+', 'for','+', 'all','+', 67,'+', 'men']]
有点贪婪:
cleansed_lists = [[word for word in sentence if word != '+'] for sentence in nested_list]
result = []
for sentence in cleansed_lists:
new_list = ['+'] * (2 * len(sentence) - 1)
new_list[::2] = sentence
result.append(new_list)
时间复杂性:
假设N是外部列表的长度,N是每个内部列表和句子的平均长度
第1行:我们使用O1操作,即if word!='+',遍历外部列表一次,遍历每个内部列表一次。因此,第1行的时间复杂度为On*N
第3-6行:我们在外部列表第3行迭代一次,相当于一个列表的大小是内部列表第4行的两倍,列表的其他元素的大小是内部列表第5行的两倍。这将产生ON*2n+n的时间复杂度,这将简化为ON*n
因此,最后的复杂性是*N.有点贪婪:
cleansed_lists = [[word for word in sentence if word != '+'] for sentence in nested_list]
result = []
for sentence in cleansed_lists:
new_list = ['+'] * (2 * len(sentence) - 1)
new_list[::2] = sentence
result.append(new_list)
时间复杂性:
假设N是外部列表的长度,N是每个内部列表和句子的平均长度
第1行:我们使用O1操作,即if word!='+',遍历外部列表一次,遍历每个内部列表一次。因此,第1行的时间复杂度为On*N
第3-6行:我们在外部列表第3行迭代一次,相当于一个列表的大小是内部列表第4行的两倍,列表的其他元素的大小是内部列表第5行的两倍。这将产生ON*2n+n的时间复杂度,这将简化为ON*n
因此,最后的复杂度为*N
输出
[[0, '+', 'the', '+', 'quick', '+', 'brown', '+', 'fox', '+', 'jumps', '+', 'over', '+', 'the', '+', 'lazy', '+', 'dog', '+', 908, '+'], ['Now', '+', 'is', '+', 'the', '+', 'time', '+', 'for', '+', 'all', '+', 67, '+', 'men', '+']]
输出
[[0, '+', 'the', '+', 'quick', '+', 'brown', '+', 'fox', '+', 'jumps', '+', 'over', '+', 'the', '+', 'lazy', '+', 'dog', '+', 908, '+'], ['Now', '+', 'is', '+', 'the', '+', 'time', '+', 'for', '+', 'all', '+', 67, '+', 'men', '+']]
我尝试了两种方法,但没有大型嵌套列表: 数据=[0'+'、'the'、'+'、'quick'、'+'、'brown'、'+'、'fox'、'+', ‘跳跃’、‘越过’、‘+’、‘the’、‘+’、‘lazy’、‘+’、‘dog’、‘+’、908] 定义功能1: 对于范围1中的i,lendata,2: 如果数据[i]!='+': data.inserti,“+” def func_2: real_data=[val表示数据中的val,如果val!='+'] 拆分器='+'*lenreal_数据 [i代表Ziperal_数据中的ab,拆分器代表ab中的i][:-1] %时间功能1 %timeit func_2 最终结果是:
981 ns ± 17.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
3.24 µs ± 101 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
也许你可以试试~祝你好运 我尝试了两种方法,但没有大型嵌套列表: 数据=[0'+'、'the'、'+'、'quick'、'+'、'brown'、'+'、'fox'、'+', ‘跳跃’、‘越过’、‘+’、‘the’、‘+’、‘lazy’、‘+’、‘dog’、‘+’、908] 定义功能1: 对于范围1中的i,lendata,2: 如果数据[i]!='+': data.inserti,“+” def func_2: real_data=[val表示数据中的val,如果val!='+'] 拆分器='+'*lenreal_数据 [i代表Ziperal_数据中的ab,拆分器代表ab中的i][:-1] %时间功能1 %timeit func_2 最终结果是:
981 ns ± 17.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
3.24 µs ± 101 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
也许你可以试试~祝你好运 这看起来是个小问题,你试过什么了吗?消除所有“+”并相应地处理列表不是更容易吗?如果原始列表中有+、+、+怎么办?因为您使用的是列表,所以没有真正有效的方法。迭代列表并将每个项与其相邻项进行比较。请确保从列表末尾开始迭代并向后,这样在插入加号时,不会打乱其余列表项的索引值。当然,应该将其规范化为一个+@complementdphenomenon,这是一个简单的解决方案。但是,还有其他方法吗@这看起来是个小问题,你试过什么了吗?消除所有“+”并相应地处理列表不是更容易吗?如果原始列表中有+、+、+怎么办?因为您使用的是列表,所以没有真正有效的方法。迭代列表并将每个项与其相邻项进行比较。请确保从列表末尾开始迭代并向后,这样在插入加号时,不会打乱其余列表项的索引值。当然,应该将其规范化为一个+@complementdphenomenon,这是一个简单的解决方案。但是,还有其他方法吗@Selcukhow效率是多少?@anon添加的时间复杂度分解效率是多少?@anon添加的时间复杂度分解