基于双for循环的列表推导式筛选两列表中的非负整数
符合要求的双for循环列表推导式解法
嘿,我懂你的需求啦——题目明确要求用两个for循环的列表推导式来筛选非负整数,你当前的写法虽然能得到正确结果,但确实只用到了一个for循环(遍历合并后的I+R),不符合题目的硬性要求。
这里给你两种符合要求的写法,核心都是在列表推导式里嵌套两个for循环:
方法一:遍历列表容器,再遍历每个列表元素
这是最直观的双循环写法,第一个循环负责依次取到I和R这两个列表,第二个循环遍历当前列表里的每个元素,再加上筛选条件:
I = [-1, 0, 1, 2] R = [2.7818, 0.0, -3.14159] NonNeg = [num for lst in [I, R] for num in lst if num >= 0 and isinstance(num, int)] print(NonNeg) # 输出: [0, 1, 2]
方法二:显式对两个列表分别做双循环(冗余但贴合表述)
如果你想更明确地体现对I和R的两个独立循环逻辑,也可以用这种稍显冗余的写法:
NonNeg = [num for num in I if num >= 0 and isinstance(num, int) for _ in [0]] + \ [num for num in R if num >= 0 and isinstance(num, int) for _ in [0]]
不过这种写法只是为了凑双循环形式,实际开发中更推荐第一种简洁的写法。
为什么你的原写法不符合要求?
你的代码NonNeg = [i for i in I+R if(i >= 0 and isinstance(i,int))]是先把两个列表合并成一个新列表,然后只做了一次遍历,本质上只有一个for循环,所以不满足题目“必须使用两个for循环”的条件。
内容的提问来源于stack exchange,提问作者user6866797
相关产品推荐
相关产品推荐

