![](/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.