类键入与类运行功能时

发布于 2025-02-11 14:36:35 字数 1233 浏览 1 评论 0原文

我有一个名为个人的课程,并且我有一个基于它的函数。当我跑步时,我会得到

---> 13人口:列表[个人],elite_size = 0.1,new_pop = 0.2

typeError:'type'对象无法订阅,

我该如何工作?

def selection_rank_with_population_replacement_elite(
    population: list[Individual], elite_size=0.1, new_pop=0.2
) -> list[Individual]:

    sorted_individuals = sorted(population, key=lambda ind: ind.get_sharpe(), reverse=True)
    best_n_individuals = int(np.floor(len(sorted_individuals) * elite_size))
    new_individuals = int(np.floor(len(sorted_individuals) * new_pop))
    rank_distance = 1 / len(population)
    ranks = [(1 - i * rank_distance) for i in range(len(population))]
    ranks_sum = sum(ranks)
    selected = sorted_individuals[:best_n_individuals]

    for i in range(len(sorted_individuals) - best_n_individuals - new_individuals):
        shave = random.random() * ranks_sum
        rank_sum = 0
        for i in range(len(sorted_individuals)):
            rank_sum += ranks[i]
            if rank_sum > shave:
                selected.append(sorted_individuals[i])
                break
    new_individuals = [Individual.create_random() for _ in range(new_individuals)]
    selected.extend(new_individuals)

    return selected

I have a class named Individual, and I have a function based on it. When I run I get

---> 13 population: list[Individual], elite_size=0.1, new_pop=0.2

TypeError: 'type' object is not subscriptable

How can I get this to work?

def selection_rank_with_population_replacement_elite(
    population: list[Individual], elite_size=0.1, new_pop=0.2
) -> list[Individual]:

    sorted_individuals = sorted(population, key=lambda ind: ind.get_sharpe(), reverse=True)
    best_n_individuals = int(np.floor(len(sorted_individuals) * elite_size))
    new_individuals = int(np.floor(len(sorted_individuals) * new_pop))
    rank_distance = 1 / len(population)
    ranks = [(1 - i * rank_distance) for i in range(len(population))]
    ranks_sum = sum(ranks)
    selected = sorted_individuals[:best_n_individuals]

    for i in range(len(sorted_individuals) - best_n_individuals - new_individuals):
        shave = random.random() * ranks_sum
        rank_sum = 0
        for i in range(len(sorted_individuals)):
            rank_sum += ranks[i]
            if rank_sum > shave:
                selected.append(sorted_individuals[i])
                break
    new_individuals = [Individual.create_random() for _ in range(new_individuals)]
    selected.extend(new_individuals)

    return selected

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤凫 2025-02-18 14:36:35

您的代码应与Python 3.9+一起使用,但不能与3.8或更早的情况下使用。

使用3.8,使用typing.list而不是:

from typing import List

def selection_rank_with_population_replacement_elite(
    population: List[Individual], elite_size=0.1, new_pop=0.2
) -> list[Individual]:

ref: htttps> https: //docs.python.org/3/library/typing.html (搜索typing.list.list中)

[typing.list]自版本3.9以来已弃用:hindins.list现在支持[]。

Your code should work with Python 3.9+, but will not work with 3.8 or earlier.

With 3.8, using typing.List instead:

from typing import List

def selection_rank_with_population_replacement_elite(
    population: List[Individual], elite_size=0.1, new_pop=0.2
) -> list[Individual]:

Ref: https://docs.python.org/3/library/typing.html (search for typing.List in there)

[typing.List is] Deprecated since version 3.9: builtins.list now supports [].

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文