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

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

Chủ Đề