📜  Python|将两个列表合并到元组列表中

📅  最后修改于: 2022-05-13 01:55:32.916000             🧑  作者: Mango

Python|将两个列表合并到元组列表中

给定两个列表,编写一个Python程序将这两个列表合并为元组列表。

例子:

Input : list1 = [1, 2, 3]
        list2 = ['a', 'b', 'c']
Output : [(1, 'a'), (2, 'b'), (3, 'c')]

Input : list1 = [1, 2, 3, 4]
        list2 = [ 1, 4, 9]
Output : [(1, 1), (2, 4), (3, 9), (4, '')]

方法#1:天真
使用 for 循环将两个列表合并到一个元组列表中。但缺点是两个列表需要具有相同的长度。

def merge(list1, list2):
      
    merged_list = [(list1[i], list2[i]) for i in range(0, len(list1))]
    return merged_list
      
# Driver code
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
print(merge(list1, list2))
输出:
[(1, 'a'), (2, 'b'), (3, 'c')]


方法#2:幼稚但更高效
这种方法消除了上述给定的缺点,并且可以很好地处理两个列表的不均匀长度。它还为 Index 错误提供 try catch 错误。

def merge(list1, list2):
      
    merged_list = []
    for i in range(max((len(list1), len(list2)))):
  
        while True:
            try:
                tup = (list1[i], list2[i])
            except IndexError:
                if len(list1) > len(list2):
                    list2.append('')
                    tup = (list1[i], list2[i])
                elif len(list1) < len(list2):
                    list1.append('')
                    tup = (list1[i], list2[i])
                continue
  
            merged_list.append(tup)
            break
    return merged_list
  
# Driver code
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
print(merge(list1, list2))
输出:
[(1, 'a'), (2, 'b'), (3, 'c')]


方法 #3:使用zip()
使用 zip() 方法合并两个列表元素,然后类型转换为元组。

def merge(list1, list2):
      
    merged_list = tuple(zip(list1, list2)) 
    return merged_list
      
# Driver code
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
print(merge(list1, list2))
输出:
((1, 'a'), (2, 'b'), (3, 'c'))


方法 #4:使用 enumerate(),替代 zip()。

此方法使用两个 for 循环来枚举列表并合并两个列表。

def merge(list1, list2):
      
    merged_list = [(p1, p2) for idx1, p1 in enumerate(list1) 
    for idx2, p2 in enumerate(list2) if idx1 == idx2]
    return merged_list
      
# Driver code
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
print(merge(list1, list2))
输出:
[(1, 'a'), (2, 'b'), (3, 'c')]


方法 #5:使用map()lambda

# Using map() and lambda
def listOfTuples(l1, l2):
    return list(map(lambda x, y:(x,y), l1, l2))
  
# Driver Code
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
  
print(listOfTuples(list1, list2))
输出:
[(1, 'a'), (2, 'b'), (3, 'c')]