我有兩個長度不同的(列表列表)(data_List,dataTwo_List),我想在循環中調用“funcX”函數,該循環同時遍歷兩個列表,而不會使用data_List的大小產生“List Out of Index”錯誤。
def funcX(x1, x2, y1, y2):
return math.sqrt((x1-y1)**2 + (x2-y2)**2)
data_List = [[3, 4], [3, 6], [3, 8], [4, 5], [4, 7], [5, 1], [5, 5], [7, 3], [7, 5], [8, 5]]
dataTwo_List = [[5, 5], [3, 6], [7, 3]]
funcX(data_List[0][0],dataTwo_List[0][0],data_List[0][1],dataTwo_List[0][1])
funcX(data_List[1][0],dataTwo_List[0][0],data_List[1][1],dataTwo_List[0][1])
funcX(data_List[2][0],dataTwo_List[0][0],data_List[2][1],dataTwo_List[0][1])
funcX(data_List[3][0],dataTwo_List[0][0],data_List[3][1],dataTwo_List[0][1])
...
...
funcX(data_List[0][0],dataTwo_List[1][0],data_List[0][1],dataTwo_List[1][1])
funcX(data_List[1][0],dataTwo_List[1][0],data_List[1][1],dataTwo_List[1][1])
funcX(data_List[2][0],dataTwo_List[1][0],data_List[2][1],dataTwo_List[1][1])
funcX(data_List[3][0],dataTwo_List[1][0],data_List[3][1],dataTwo_List[1][1])
...
...
你有兩種選擇:
zip(*iterables)
函數。返回一個zip對象,它是一個元組迭代器,其中每個傳遞的迭代器中的第一個項配對在一起。如果傳遞的迭代器具有不同的長度,則項最少的迭代器決定新迭代器的長度。itertools.zip_longest(*iterables, fillvalue=None)
函數。生成一個迭代器,從每個iterable聚合元素。如果iterables的長度不均勻,則缺少的值是filled-in和fillvalue。無論選擇什么,結果都類似于:
更新。很抱歉,我沒有看到你想要的結果,我想這就是你想要的:
product
函數返回一個迭代器,該迭代器在兩個元素列表之間生成笛卡爾積。我將dataTwo_List放在第一位,以生成您想要的相同順序。