Python 迭代两个列表,其中一个列表可能为空
我想得到两个列表的乘积。我可以使用以下方法进行此操作: 来自itertools导入产品的Python 迭代两个列表,其中一个列表可能为空,python,Python,我想得到两个列表的乘积。我可以使用以下方法进行此操作: 来自itertools导入产品的 对于产品中的i([1,2],'a','b']): 打印(i,end='\t') 给出: (1,'a')(1,'b')(2,'a')(2,'b')) 问题是两个列表中的一个可能是空的。在本例中,我只需要将非空列表作为普通for循环进行迭代。比如: 表示我在某物中([1,2],]): 打印(i,end='\t') 给予: 12 如果我在开始时用许多检查列表长度的if语句处理异常,并且对每个组合使用相同的
对于产品中的i([1,2],'a','b']):
打印(i,end='\t')
给出:
(1,'a')(1,'b')(2,'a')(2,'b'))
问题是两个列表中的一个可能是空的。在本例中,我只需要将非空列表作为普通for循环进行迭代。比如:
表示我在某物中([1,2],]):
打印(i,end='\t')
给予:
12
如果我在开始时用许多检查列表长度的if
语句处理异常,并且对每个组合使用相同的代码(list1
为空,list2
为空,没有一个为空),那么代码工作得很好,但这样我只编写了相同的代码3次:
来自itertools导入产品的
如果不是列表1:
对于清单2中的i:
打印(i,end='\t')
elif未列出2:
对于清单1中的i:
打印(i,end='\t')
其他:
对于产品中的i(列表1、列表2):
打印(i,end='\t')
有更优雅的方法吗?我建议您采用以下方法:
seq = product(list1, list2) if (list1 and list2) else (list1 or list2)
for item in seq:
print(item, end='\t')
你可以通过阅读了解为什么使用
和和或有效。你不能循环一个元组吗for i in(lst,lst2):
@Tomerikoo这并不能解决“在第二种情况下,我需要所有的组合,比如嵌套的for循环”,因为zip_最长会打印较长列表中的所有元素,但它不会将它们与较短列表中的元素组合。它只是将它们标记为“None”@The.B我需要访问这两个元素,因为它们是dataframe中的列,我需要用.loc选择它们separately@Tomerikoo我认为这很清楚,但无论如何:list1=[1,2,3,4]list2=[“a”,“b”]out=1A,1B,2A,2B等
如果一个列表为空:`list1=[]list2=[“a”,“b”]out=“a”,“b”`检查产品,我认为如果一个列表为空,则它不起作用。如果它们的长度相同,我只需要像嵌套循环一样的组合