Làm thế nào để bạn thực hiện kết hợp hai danh sách trong python?


Có một số cách để tham gia hoặc nối hai hoặc nhiều danh sách trong Python

Show

    Một trong những cách dễ nhất là sử dụng toán tử

    def brute_force(x,y):
      combo = [ ]
      new = " "
      for i in range(y):
         new = x + i
         combo.append(new)
      return combo
    7

    Thí dụ

    Tham gia hai danh sách

    list1 = ["a", "b" , "c"]
    list2 = [1, 2, 3]

    list3 = list1 + list2
    print(list3)

    Tự mình thử »

    Một cách khác để nối hai danh sách là nối thêm tất cả các mục từ danh sách 2 vào danh sách 1, từng mục một

    Thí dụ

    Nối list2 vào list1

    list1 = ["a", "b" , "c"]
    list2 = [1, 2, 3]

    cho x trong list2.
      danh sách1. nối thêm(x)

    in (danh sách1)

    Tự mình thử »

    Hoặc bạn có thể sử dụng phương thức

    def brute_force(x,y):
      combo = [ ]
      new = " "
      for i in range(y):
         new = x + i
         combo.append(new)
      return combo
    8, mục đích là thêm các phần tử từ danh sách này sang danh sách khác

    Thí dụ

    Sử dụng phương thức

    def brute_force(x,y):
      combo = [ ]
      new = " "
      for i in range(y):
         new = x + i
         combo.append(new)
      return combo
    8 để thêm list2 vào cuối list1

    list1 = ["a", "b" , "c"]
    list2 = [1, 2, 3]

    danh sách1. gia hạn(list2)
    print(list1)

    Tự mình thử »





    Mã nguồn

    import itertools
    from itertools import permutations
    l1 = ['A','B','C']
    l2 = [1,2,3]
    unique = []
    permut = itertools.permutations(l1, len(l2))
    for comb in permut:
    	zipped = zip(comb, l2)
    	unique.append(list(zipped))
     
    print(unique)

    đầu ra

    [[('A', 1), ('B', 2), ('C', 3)], [('A', 1), ('C', 2), ('B', 3)], [('B', 1), ('A', 2), ('C', 3)], [('B', 1), ('C', 2), ('A', 3)], [('C', 1), ('A', 2), ('B', 3)], [('C', 1), ('B', 2), ('A', 3)]]
    
    

    Để tải file raw Bấm vào đây

    Xin chào, tôi đã hoàn thành 70% khóa học Python trên Code Academy và bắt đầu nhờ bạn bè gửi cho tôi các dự án để thực hiện và một trong số họ đã yêu cầu tôi làm như sau. Tôi tự hỏi liệu có ai có thể giúp tôi tìm ra cách kết hợp hai danh sách lại với nhau để lặp qua tất cả các kết hợp có thể có của hai danh sách không, tôi. e. , một ví dụ về vũ lực. Tôi thiết lập các danh sách thành cả hai chuỗi để giảm nhầm lẫn khi phải phân biệt giữa int và str. Tôi cũng đang cố gắng tìm ra cách di chuyển tăng dần qua danh sách bằng cách sử dụng các chỉ số. (không hoàn toàn chắc chắn cách nào là tốt nhất/hiệu quả nhất)

    tên = [“jed”, “zed”, “ged”, “fed”] mã = ​​[“11”, “22”, “33”, “44”]

    def brute_force(x,y):
      combo = [ ]
      new = " "
      for i in range(y):
         new = x + i
         combo.append(new)
      return combo

    Đây là những gì tôi có và rõ ràng là tôi bị mất, tôi đã viết một đống thứ mà nó in ra cả hai danh sách chứ không phải từng mục trong danh sách được ghép nối * 4. Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn bạn

    Tạo tất cả các kết hợp lấy một phần tử từ mỗi danh sách trong Python có thể được thực hiện dễ dàng bằng itertools. chức năng sản phẩm. Nó là một phần của mô-đun itertools và rất hữu ích trong trường hợp này

    Giải pháp ngắn gọn như sau

    list = [list1, list2]
    combinations = [p for p in itertools.product(*list)]
    

    Đọc để hiểu làm thế nào điều này là làm việc tốt hơn

    Mô-đun itertools đã được phát triển và đang được bảo trì bởi Raymond D. Hettinger. Trong bài viết này, chúng tôi sẽ tập trung vào việc sử dụng chức năng sản phẩm của itertools để giải quyết vấn đề của chúng tôi là chủ yếu

    Vấn đề của chúng ta là. "Tạo tất cả các kết hợp lấy một phần tử từ mỗi danh sách". Trong Toán học, đây được gọi là tích Descartes của các danh sách

    Tích cartesian của hai danh sách A và B được định nghĩa như sau

    cartesian product of A and B = (x, y) where x belongs to A and y belongs to B
    

    Trong Python, itertools. product tạo ra tích cartesian và ưu điểm lớn là nó có thể lấy bất kỳ số lượng danh sách nào làm đầu vào

    Sử dụng itertools. sản phẩm

    Để sử dụng itertools. sản phẩm, chúng tôi cần nhập mô-đun itertools trong mã Python, được thực hiện như sau

    import itertools
    

    Như itertools. sản phẩm sẽ lấy danh sách làm đầu vào, chúng tôi cần tạo một số danh sách. Trong Python, có nhiều cách để tạo danh sách và có thể linh hoạt tạo danh sách dài theo mẫu hoặc với các phần tử ngẫu nhiên

    Một số cách phổ biến để tạo danh sách trong Python như sau

    # to generate list as [2, 3, 4, 5]
    list = list(range(2, 5))
    
    # another approach
    list = [2, 3, 4, 5]
    
    # list with powers of two less than 1000
    list = [2**j for j in range(1, 9)]
    
    # list with same number (1) repeated 1000 times
    list = [1] * 1000
    

    Có nhiều cách tiếp cận để tạo danh sách và bạn nên khám phá nó theo nhu cầu của mình. Đối với ví dụ hiện tại của chúng tôi, chúng tôi sẽ tạo hai danh sách là list1 và list2

    list1 = list(range(5, 10))
    list2 = [1, 2, 3]
    

    Lưu ý rằng list1 và list2 có số phần tử khác nhau

    Sau đó, chúng tôi sẽ tạo một danh sách cuối cùng trong đó các phần tử sẽ là danh sách mà chúng tôi sẽ lấy các phần tử

    ________số 8

    Sau đó, bạn cần chuyển "danh sách" danh sách cuối cùng này cho itertools. sản phẩm sẽ tạo ra tất cả các kết hợp hoặc sản phẩm cartesian

    combination = [p for p in itertools.product(*list)]
    

    Tại thời điểm này, chúng ta có thể in các kết hợp và xem các kết hợp đã được tạo

    [[('A', 1), ('B', 2), ('C', 3)], [('A', 1), ('C', 2), ('B', 3)], [('B', 1), ('A', 2), ('C', 3)], [('B', 1), ('C', 2), ('A', 3)], [('C', 1), ('A', 2), ('B', 3)], [('C', 1), ('B', 2), ('A', 3)]]
    
    
    0

    đầu ra

    [[('A', 1), ('B', 2), ('C', 3)], [('A', 1), ('C', 2), ('B', 3)], [('B', 1), ('A', 2), ('C', 3)], [('B', 1), ('C', 2), ('A', 3)], [('C', 1), ('A', 2), ('B', 3)], [('C', 1), ('B', 2), ('A', 3)]]
    
    
    1

    Mã hoàn chỉnh như sau

    [[('A', 1), ('B', 2), ('C', 3)], [('A', 1), ('C', 2), ('B', 3)], [('B', 1), ('A', 2), ('C', 3)], [('B', 1), ('C', 2), ('A', 3)], [('C', 1), ('A', 2), ('B', 3)], [('C', 1), ('B', 2), ('A', 3)]]
    
    
    2Nhận số lượng kết hợp

    Để có được số lượng kết hợp, chúng ta chỉ cần sử dụng hàm len trên danh sách kết hợp là đầu ra

    cartesian product of A and B = (x, y) where x belongs to A and y belongs to B
    
    0

    Đối với ví dụ trên của chúng tôi, nó sẽ đưa ra 15 kết hợp. Hoàn thành mã

    cartesian product of A and B = (x, y) where x belongs to A and y belongs to B
    
    1

    đầu ra

    cartesian product of A and B = (x, y) where x belongs to A and y belongs to B
    
    2

    Trên thực tế, điều này giống như tích độ dài của các danh sách riêng lẻ, chẳng hạn như

    cartesian product of A and B = (x, y) where x belongs to A and y belongs to B
    
    3Đi qua các kết hợp

    Hãy để chúng tôi duyệt qua các kết hợp mà chúng tôi đã tạo để làm bất cứ điều gì hữu ích với các kết hợp đã tạo, chúng tôi cần duyệt qua nó và nhận các kết hợp riêng lẻ

    Các mục có thể được duyệt qua như sau

    cartesian product of A and B = (x, y) where x belongs to A and y belongs to B
    
    4

    Nó cũng có thể được truy cập theo chỉ mục

    cartesian product of A and B = (x, y) where x belongs to A and y belongs to B
    
    5

    Hoàn thành mã Python

    cartesian product of A and B = (x, y) where x belongs to A and y belongs to B
    
    6

    đầu ra

    cartesian product of A and B = (x, y) where x belongs to A and y belongs to B
    
    7

    Với điều này, bạn có một ý tưởng hay để vượt qua các kết hợp khác nhau

    Ví dụ với 4 danh sách
    cartesian product of A and B = (x, y) where x belongs to A and y belongs to B
    
    8

    đầu ra

    cartesian product of A and B = (x, y) where x belongs to A and y belongs to B
    
    9

    Nếu một trong danh sách trống thì sao?

    Mã cho danh sách trống

    import itertools
    
    0

    đầu ra

    import itertools
    
    1

    Bạn có thể tự hỏi điều gì sẽ xảy ra nếu chúng ta chỉ chuyển một danh sách vào hàm sản phẩm. Trong trường hợp này, nó sẽ chỉ trả về từng phần tử của danh sách một

    import itertools
    
    2

    đầu ra

    import itertools
    
    3

    Với điều này, bạn có kiến ​​thức đầy đủ về cách tạo tất cả các kết hợp bằng cách lấy một phần tử từ mỗi danh sách trong Python. Đây là một quá trình hữu ích. Vui thích