![](/img/trans.png)
[英]Trying to find longest string in a list using recursion. Why am I getting none?
[英]Stuck with implementing permutations using recursion. Not getting any output
我想寫一個 function permutations(route, cities)
。 它應該將一個列表( cities
),append cities
的每個可能排列到route
列表中,並將route
中的每個排列打印在新的一行上。 每個排列必須從第一個城市開始,即“波士頓”。
我正在為此實現使用遞歸,但無法使其正常工作。
def permutations(route, cities):
def recurs(cities_temp):
if len(cities_temp) == 0:
return []
elif len(cities_temp) == 1:
return [cities_temp]
else:
route_temp = []
for i in range(len(cities_temp)):
x = cities_temp[i] #x is item i in the input list
y = cities_temp[:i] + cities_temp[1+i:] #y is the remaining (everything but item i)
for j in recurs(y):
route_temp.append([x] + j)
return route_temp
route = recurs(cities)
print(' '.join([city_names[i] for i in route]))
city_names = ["Boston", "Seattle", "Chicago", "Dallas"]
permutations([0], list(range(1, len(city_names)))) #calling the permutations function
大家可以看看它,讓我知道我做錯了什么嗎?
我不知道您問題中的代碼有什么問題,但認為您正在“重新發明輪子”,因為您可以使用itertools.permutations() function 來獲取它們:
from itertools import permutations
from pprint import pprint
city_names = ["Boston", "Seattle", "Chicago", "Dallas"]
permutes = [(city_names[0],)+p for p in permutations(city_names[1:])]
pprint(permutes)
Output:
[('Boston', 'Seattle', 'Chicago', 'Dallas'),
('Boston', 'Seattle', 'Dallas', 'Chicago'),
('Boston', 'Chicago', 'Seattle', 'Dallas'),
('Boston', 'Chicago', 'Dallas', 'Seattle'),
('Boston', 'Dallas', 'Seattle', 'Chicago'),
('Boston', 'Dallas', 'Chicago', 'Seattle')]
我一直忽略這個練習,直到我有更好的心態,但最終能夠像教練希望的那樣解決它。
這是代碼。 感謝您對我最初的問題的所有答復。
portnames = ["PAN", "AMS", "CAS", "NYC", "HEL"]
def permutations(route, ports):
n = len(ports) - 1
def recursion(ports):
if len(ports) == 1:
return [ports]
else:
lst = []
for i in range(len(ports)):
x = [ports[i]]
xs = ports[:i] + ports[i+1:]
for j in recursion(xs):
if len(j) == n:
lst.append(route + x + j)
else:
lst.append(x + j)
return lst
for p in recursion(list(range(1, len(portnames)))):
print(' '.join([portnames[i] for i in p]))
return recursion(ports)
permutations([0], list(range(1, len(portnames))))
問題在於將置換索引與城市名稱進行映射。我使用 map function 編輯了代碼。 看一看。
def permutations(route, cities):
def recurs(cities_temp):
if len(cities_temp) == 0:
return []
elif len(cities_temp) == 1:
return [cities_temp]
else:
route_temp = []
for i in range(len(cities_temp)):
x = cities_temp[i] #x is item i in the input list
y = cities_temp[:i] + cities_temp[1+i:] #y is the remaining (everything but item I)
for j in recurs(y):
route_temp.append([x] + j)
return route_temp
route = recurs(cities)
# mapping index with city names from city_names list
mapped_route = [list(map(lambda x : city_names[x],r)) for r in route]
# adding boston in front of every permutation
final_route = list(map(lambda x : "Boston "+x,[' '.join(r) for r in mapped_route]))
print(final_route)
city_names = ["Boston", "Seattle", "Chicago", "Dallas"]
permutations([0], list(range(1, len(city_names))))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.