dyi*_*ist 3 list-comprehension
在尝试锻炼列表理解时,我陷入了重复所需的价值.
我有2个列表:L1,L2.如果这些项小于/等于,则需要的结果是来自L2的项目列表,L1中的至少一个项目.
L1=[10,20,30,40,50]
L2=[3,11,51]
L3=[d2 for d2 in L2 for d1 in l1 if d2<=d1]
Run Code Online (Sandbox Code Playgroud)
L3返回为[3,3,3,3,3,11,11,11,11]
答案包含有效的项目,但会重复.我知道使用set(),我们可以摆脱重复,但可能是我以错误的方式使用列表理解.任何澄清将不胜感激.
实现预期结果的循环将是:
L3=[]
for d2 in L2:
for d1 in L1:
if d2<=d1:
L3.append(d2)
Run Code Online (Sandbox Code Playgroud)
从扩展到循环可以看出,内部循环遍历每个元素L1,因此每次有更大的元素时,d2元素将被附加一次.L2
您可以使用set()(等效,{ }HepaKKes建议的括号)来摆脱重复,但这是低效的 - 您仍然在创建不需要的中间结果.这将是O(n^2)时候了.
您根据它们是否<=比任何项目选择项目L1.这和问他们是否相同<= max(L1).所以以下内容:
L3 = [e for e in L2 if e < max(L1)]
Run Code Online (Sandbox Code Playgroud)
会达到同样的效果.如果您L1提前保存值
L1_max = max(L1)
L3 = [e for e in L2 if e < L1_max]
Run Code Online (Sandbox Code Playgroud)
然后这个解决方案是O(n).