python – zip(跳过一个列表中的元素但不跳过其他列表)
发布时间:2020-12-20 11:39:31 所属栏目:Python 来源:网络整理
导读:我有2个列表,a和b.让我们说len(a)= len(b)1.我想同时迭代两个列表,条件.因为,a有额外的垃圾值,它应该从a中跳过该值,但它不应该跳过b中的值.然后,当下一次迭代发生时,a应从下一个元素开始,b前面是相同的初始元素. 示例中的解释. a = [1,2,3,4,5,6,19,20]b = [
我有2个列表,a和b.让我们说len(a)= len(b)1.我想同时迭代两个列表,条件.因为,a有额外的垃圾值,它应该从a中跳过该值,但它不应该跳过b中的值.然后,当下一次迭代发生时,a应从下一个元素开始,b前面是相同的初始元素.
示例中的解释. a = [1,2,3,4,5,6,19,20] b = [7,8,9,10,11,17,18] for x,y in zip(a,b): if x == 5: # some condition #in this case y is 11 continue # skip the value 5 from a but dont skip 11 from b. print x,y 预期的产出将是 1 7 2 8 3 9 4 10 6 11 # 5 skipped because of some condition,but 11 remains intact 19 17 20 18 我该怎么做? 或者如果有任何其他解决方案,同时迭代,请告诉我. 解决方法
如果在循环之前不知道要跳过哪个值,则可以使用迭代器,然后调用next来丢弃值:
import itertools a = [1,18] it_a = iter(a) it_b = iter(b) for x,y in itertools.izip(it_a,it_b): if x == 5: x = next(it_a) print x,y 这使: 1 7 2 8 3 9 4 10 6 11 19 17 20 18 但要小心.如果你调用next(it_a),并且你已经从迭代器中读取了所有的值,那么你将得到一个StopIteration异常,你可能想以某种方式处理它.另外,请注意,如果你以某种方式跳过a的两个元素,那么a将在b之前耗尽元素,并且zip将在生成b的最后一个元素之前静默停止. 或者,如果您在进入for循环之前确实知道要排除的内容,那么您可以基本上完??成@wnnmaw在下面建议的内容,但使用生成器理解而不是列表理解.这将懒惰地排除: a = [1,18] it_a = (x for x in a if x not in {5,42,101}) for x,y in zip(it_a,b): print x,y (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |