相关疑难解决方法(0)

需要帮助编写递归函数,通过数字列表找到最便宜的路线

所以我一直在做这个家庭作业问题几个小时,我会尽力解释它.

我需要在python中编写一个程序来获取列表并在列表中的第一个项目处启动,您可以向前移动一个空格或跳过一个项目并在其另一侧着陆,每个项目都会降低成本该位置的号码.目标是尽可能便宜地达到目的.

我写了这个函数,

def player(cost, board, player_pos):
    if player_pos == (len(board)) - 1:    
        return cost
    if player_pos < (len(board)) - 2:     
        if board[player_pos + 1] > board[player_pos + 2]:
            return player(cost + board[player_pos + 2], board, player_pos + 2)
        else:
            return player(cost + board[player_pos + 1], board, player_pos + 1)
    elif player_pos == (len(board)) - 2:
        return (cost + board[player_pos] + board[player_pos + 1])
Run Code Online (Sandbox Code Playgroud)

但它无法看到接下来的两个位置,所以它可能会出错.一个很好的例子是这个列表[0,1,2,1000,0]我的程序输出3因为它选择1超过2,然后超过1000,然后是0.这加起来为3,但最快的方法是跳转到2,然后到0.

在家庭作业中它表示可能需要很长时间来运行长列表,我猜他们希望我尝试每种可能的跳转组合并选择最便宜的组合,但我不知道如何使用递归.

编辑: 所以这是我根据评论做出的改进,它适用于我教授的所有例子.给了我除了一个,这是它没有返回他说的应该的列表.[0,98,7,44,25,3,5,55,46,4]他说它应该返回87,但我调整后的程序返回124.这是新代码:

def player(cost, board, player_pos):
    if player_pos == (len(board)) - 1:    
        return cost …
Run Code Online (Sandbox Code Playgroud)

python recursion

4
推荐指数
1
解决办法
1060
查看次数

为什么python 1000中的最大递归深度是多少?

我很好奇python中的MRD(最大递归深度),所以我这样写:

def call(n):
    print (n)
    return call(n+1)

call(1)
Run Code Online (Sandbox Code Playgroud)

最终结果是979,这对我来说是个奇特的数字。我找不到任何地方为什么这个数字是标准的。因为我是一个自学成才的程序员,所以我很理解用简单的术语进行解释。

编辑:显然应该是1000,但是为什么这个数字呢?

python

3
推荐指数
1
解决办法
934
查看次数

python递归中的LinkedLists

我在python中有一个简单的LinkedList实现.如何在方法中使用递归?我知道递归是如何工作的,但我如何使用自我递归.如果有人可以修复我的代码,但我对解释更感兴趣,那么我可以在不同的方法中使用它.

LinkedList代码:

class Node:
    def __init__(self, item, next):
        self.item = item
        self.next = next

class LinkedList:
    def __init__(self):
        self.head = None

    def add(self, item):
        self.head = Node(item, self.head)

    def remove(self):
        if self.is_empty():
            return None
        else:
            item = self.head.item
            self.head = self.head.next
            return item

    def is_empty(self):
        return self.head == None 
Run Code Online (Sandbox Code Playgroud)

我的代码是:

def count(self, ptr=self.head):
    if ptr == None:
        return '0'
    else:
        return 1 + self.count(ptr.next)
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误:

def count(self, ptr=self.head):
NameError: name 'self' is not defined
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢.

python recursion linked-list

3
推荐指数
1
解决办法
364
查看次数

有效地在字符串中进行多次多次替换

人们之前已经讨论过如何基于字典在字符串中进行多次替换(例如,参见)。似乎有一组string.replace基于正则表达式的选项和一组基于正则表达式的选项,还有几个选项。

但是我对取决于字典大小的不同方法的效率感兴趣,我发现这具有非常重要的影响。

my_subs = {'Hello world': 'apple', 'is': 'ship'}
string = 'Hello world! This is nice.'
new_string = my_efficient_method(string, my_subs)
Run Code Online (Sandbox Code Playgroud)

需要明确的是,这个问题不是关于如何进行这些替换,而是关于哪种方法在哪些条件下更有效,以及适用哪些注意事项。特别是,当有很多(>100k)个长字符串(10-20k 个字符)并且字典很大(>80k 对)时,我正在寻找最实用的方法。在这些情况下,基于正则表达式的首选方法性能非常差。

python text replace

3
推荐指数
1
解决办法
2095
查看次数

对带有子列表的可迭代对象的每个元素应用函数

我试图将一个函数应用于包含任意子列表子级别的列表的每个元素。像这样。

a = [1,2,3]
b = [[1,2,3],[4,5,6]]
c = [[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]

function = lambda x: x+1
def apply(iterable,f): 
    # do stuff here
Run Code Online (Sandbox Code Playgroud)
print(apply(a,function)) # [2,3,4]
print(apply(b,function)) # [[2,3,4],[5,6,7]]
print(apply(c,function)) # [[[2,3,4],[5,6,7]],[[8,9,10],[11,12,13]]]
Run Code Online (Sandbox Code Playgroud)

基本上我找不到编写apply函数的方法。我尝试过 numpy,但这当然不是解决方案,因为列表的内容也可以是字符串、对象......

python iterable list python-3.x

3
推荐指数
1
解决办法
165
查看次数

如何解决调用Python对象时超出最大递归深度的问题

回溯:

   File "/usr/lib/python3.7/inspect.py", line 3083, in signature
      return Signature.from_callabl`enter code here`e(obj, follow_wrapped=follow_wrapped)
    File "/usr/lib/python3.7/inspect.py"`enter code here`, li`enter code here`ne 2833, in from_callable
        follow_wrapper_chain`enter code here`s=follow_wrapped)
      File "/usr/lib/python3.7/inspect.py", line 2284, in _signature_from_callable
        return _signature_from_function(sigcls, obj)
      File "/usr/lib/python3.7/inspect.py", line 2154, in _signature_from_function
        kind=_POSITIONAL_OR_KEYWORD))
      File "/usr/lib/python3.7/inspect.py", line 2469, in __init__
        self._kind = _ParameterKind(kind)
      File "/usr/lib/python3.7/enum.py", line 310, in __call__
        return cls.__new__(cls, value)
      File "/usr/lib/python3.7/enum.py", line 530, in __new__
        if type(value) is cls:
RecursionError: maximum recursion depth exceeded while calling a Python object
Run Code Online (Sandbox Code Playgroud)

urls.py …

python django

2
推荐指数
1
解决办法
1万
查看次数

有没有办法在Python中将递归限制设置为无限?

所以我试图制作一个简单的程序,计算谐波系列的总和,然后打印结果.但随后递归限制阻止它继续下去.

这是程序:

def harm_sum(n):
    if n < 2:
        return 1
    else: 
return (1 / n) + (harm_sum(n - 1))

x = 1
while True:
    print(x, harm_sum(x))
    x += 1
Run Code Online (Sandbox Code Playgroud)

我希望程序继续运行尽管递归限制是否有办法做到这一点?

python python-3.x

1
推荐指数
1
解决办法
382
查看次数

标签 统计

python ×7

python-3.x ×2

recursion ×2

django ×1

iterable ×1

linked-list ×1

list ×1

replace ×1

text ×1