Nếu có một danh sách như vậy:cách nhanh các chuỗi qua trong một danh sách
shops=['A','B','C','D']
Và muốn tạo danh sách mới như sau (tôi qua mỗi phần tử với mỗi khác và tạo ra một chuỗi nơi phần đầu tiên là alphanumerically trước giây):
['A-B', 'A-C', 'A-D']
['A-B', 'B-C', 'B-D']
['A-C', 'B-C', 'C-D']
['A-D', 'B-D', 'C-D']
tôi có một cái gì đó như thế này:
for a in shops:
cons = []
for b in shops:
if a!=b:
con = [a,b]
con = sorted(con, key=lambda x: float(x))
cons.append(con[0]+'-'+con[1])
print(cons)
Tuy nhiên, đây là pr chậm cho các danh sách lớn (ví dụ: 1000 nơi tôi có 1000 * 999 * 0,5 kết quả đầu ra). Tôi đang tìm kiếm một cách hiệu quả hơn để làm điều này?
Tôi có thể đã sử dụng mệnh đề if-else cho sắp xếp, ví dụ:
for a in shops:
cons = []
for b in shops:
if a<b:
cons.append(a+"-"+b)
elif a>b:
cons.append(b+"-"+a)
print(cons)
nào, tôi đã không tính thời gian được nêu ra - tuy nhiên tôi nghĩ rằng chính chậm xuống là gấp đôi cho vòng
Tại sao không '('A_B', 'A_C', 'B_C')'? – Kasramvd
'khóa = lambda x: float (x)' là như nhau - chỉ chậm hơn - như 'key = float' –
Tôi không điều bạn có thể nhận được sự phức tạp tổng thể của thuật toán này xuống, vì bạn phải tạo tất cả những kết hợp đó. Bạn chỉ có thể thực hiện điều chỉnh vi mô (như không định nghĩa các lambda không cần thiết). Tuy nhiên: Bạn cần những kết hợp nào ở vị trí đầu tiên? Có thể có một cách tốt hơn, ví dụ: chỉ tạo các kết hợp hoặc không có sắp xếp. –