use*_*076 2 python for-loop list-comprehension list
在Python(3.5)中,如果我有一个这样的长列表:
long_list = ['0','1','0','1','0','0'.'0'.'1','1','0']
Run Code Online (Sandbox Code Playgroud)
还有一个较短的列表,其长度等于long_list中的'1',如下所示:
short_list = [8,7,6,5]
Run Code Online (Sandbox Code Playgroud)
我如何创建一个新列表,将我的short_list的值"插入"我的long_list中的每个索引,其中有一个'1',为了保持一致性,用一些数字"替换"long_list中的'0'(说99).
我可以通过一个令人难以忍受的for循环来做到这一点,但似乎应该有一种方法来更有效地使用列表理解来做到这一点,不是吗?
# bad solution
new_list = []
x = 0
for i in range(len(long_list)):
if long_list[i] == '0':
new_list.append(99)
else:
new_list.append(short_list[x])
x += 1
Run Code Online (Sandbox Code Playgroud)
期望的输出:
new_list = [99,8,99,7,99,99,99,6,5,99]
Run Code Online (Sandbox Code Playgroud)
转到short_list迭代器并使用list comprehension从那里获取每个'1'值,否则使用固定值:
>>> long_list = ['0','1','0','1','0','0','0','1','1','0']
>>> short_list = [8,7,6,5]
>>> it = iter(short_list)
>>> [next(it) if x == '1' else 99 for x in long_list]
[99, 8, 99, 7, 99, 99, 99, 6, 5, 99]
Run Code Online (Sandbox Code Playgroud)
这显然只有在short_list具有相同数量或更多元素1的情况下才有效long_list.上面有O(n)时间复杂度,其中n是元素的数量long_list.请注意,对于所有类型的迭代,这都是相同的,long_list并且short_list可能是生成器,最终结果将是相同的.
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |