小编Dal*_*tor的帖子

删除列表中的子串,其复杂度优于O(n ^ 2)

我有一个包含许多单词(100.000+)的列表,我想要做的是删除列表中每个单词的所有子串.

所以为简单起见,让我们假设我有以下列表:

words = ['Hello', 'Hell', 'Apple', 'Banana', 'Ban', 'Peter', 'P', 'e']
Run Code Online (Sandbox Code Playgroud)

以下输出是所需的:

['Hello', 'Apple', 'Banana', 'Peter']
Run Code Online (Sandbox Code Playgroud)
  • 'Hell' 被删除,因为它是一个子串 'Hello'
  • 'Ban' 被删除,因为它是一个子串 'Banana'
  • 'P' 被删除,因为它是一个子串 'Peter'
  • 'e'被删除,因为它是一个字符串'Hello','Hell', 'Apple',等等.

我做了什么

这是我的代码,但我想知道是否有比这些嵌套理解更有效的方法.

to_remove = [x for x in words for y in words if x != y and x in y]
output = [x for x in words if x not in to_remove]
Run Code Online (Sandbox Code Playgroud)

如何提高性能?我应该用regex吗?

python string algorithm list

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

Django - 如何在管理表单中设置请求?

我有一个使用请求对象的表单:

class FooForm(forms.ModelForm):

    class Meta:
        model = Foo
        fields = ('title', )

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request')
        super().__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

在我看来,每当我想实例化表单时,只需执行以下操作即可:

class FooCreateView(LoginRequiredMixin, CreateView):
    model = Foo
    form_class = FooForm

    def get_form_kwargs(self):
        kwargs = super(FooCreateView, self).get_form_kwargs()
        kwargs.update({'request': self.request})
        return kwargs
Run Code Online (Sandbox Code Playgroud)

现在,我想在管理面板中使用相同的表单,因此我执行以下操作:

class FooAdmin(admin.ModelAdmin):
    form = FooForm
Run Code Online (Sandbox Code Playgroud)

但是砰!它死了:

KeyError at /admin/foo/foo/add/
'request'
Run Code Online (Sandbox Code Playgroud)

我尝试执行以下操作,但没有用

def get_form(self, request, *args,  **kwargs):
    form = super(FooAdmin, self).get_form(request, *args, **kwargs)
    form.request = request
    kwargs['request'] = request
    return form
Run Code Online (Sandbox Code Playgroud)

总之,有没有办法将请求传递给管理表单?

django django-forms django-admin

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

在Python中按其元素的总和对组合进行排序

我有一个巨大的Python整数列表(1000000+元素),但为了简单起见,我将用一个例子来说明我需要的东西.我们假设我有这个清单:

A = [1,2,3,4,100]
Run Code Online (Sandbox Code Playgroud)

现在我想得到该列表的所有组合(大小3),所以我使用itertools.

combinations = itertools.combinations(A,3)
Run Code Online (Sandbox Code Playgroud)

但我的问题是,这将按字典顺序返回组合:

(1,2,3)
(1,2,4)
(1,2,100)
(1,3,4)
Run Code Online (Sandbox Code Playgroud)

等等.

我想得到按其元素总和排序的组合.那将是:

(1,2,3)总和6,(1,2,4)和7,(1,3,4)和8,

等等.

我怎样才能做到这一点?

python sorting combinations python-itertools

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

Django,在prefetch_related之后更新对象

我有以下型号:

class Publisher(models.Model):
    name = models.CharField(max_length=30)


class Book(models.Model):
    title = models.CharField(max_length=100)
    publisher = models.ForeignKey(Publisher)
Run Code Online (Sandbox Code Playgroud)

在我的views.py中,当我想显示发布者页面时,我也想展示他们的书籍,所以我通常会这样做:

publisher = Publisher.objects.prefetch_related('book_set').filter(pk=id).first()
Run Code Online (Sandbox Code Playgroud)

然后,经过一些处理,我也做了一些书籍的工作

for book in publisher.book_set.all():
    foo()
Run Code Online (Sandbox Code Playgroud)

这很好用,但我有一个问题.如果在查询和for循环之间添加了一本书,publisher.book_set.all()则不会有新添加的书籍,因为它是预取的.

有没有办法更新发布者对象?

python django django-orm

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

Django 通道,断开连接

我的 WebSockets 与 django 通道一起使用。我想做的最后一件事是在用户单击按钮时关闭套接字,因此在前端,我只需向服务器发送一条断开连接消息:

socket.send({action: 'disconnect'});

然后,在我的消费者中,我只需断开连接:

async def receive(self, text_data):
    text_data_json = json.loads(text_data)
    if 'action' in text_data_json and text_data_json['action'] == 'disconnect':
        await self.disconnect(0)


async def disconnect(self, close_code):
    await self.channel_layer.group_discard(
        self.room_group_name,
        self.channel_name
    )
Run Code Online (Sandbox Code Playgroud)

为什么我的 WebSocket 无法正确断开连接?(我仍然收到消息)

django django-channels

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

Django ORM - 在 FROM 子句中使用子查询

目标:使用 RowNumber 函数获取每行的编号,然后按值进行过滤,但保留不应用过滤器时给出的相应 RowNumber,否则 RowNumber 将始终返回 1。

\n\n

在转换为 Django ORM 之前,我发现获取 SQL 语法很有帮助,如下所示:

\n\n
SELECT rn.row_number, name \nFROM ( SELECT ROW_NUMBER() OVER (ORDER BY name), name\n       FROM customer ) as rn\nWHERE name = 'Juan' \n
Run Code Online (Sandbox Code Playgroud)\n\n

问题我可以\xc2\xb4t 设法将其转换为 Django ORM。我已经尝试过以下方法:

\n\n
subq = models.Customer.objects.all().annotate(\n            rank=Window(\n                expression=RowNumber(),\n                order_by=(F('name'))\n            )\n           )\n
Run Code Online (Sandbox Code Playgroud)\n\n

Here\xc2\xb4s 我不\xc2\xb4t 不知道如何继续。如何告诉我的models.Customer在其查询中使用subq作为FROM

\n

django django-orm

5
推荐指数
0
解决办法
175
查看次数

Django - 创建或删除对象

我想知道在 Django 中创建(如果它不存在)或删除(如果它存在)一个对象的最佳方法是什么。

我知道我可以做这样的事情:

if Like.objects.filter(user=request.user, post=post).exists():
    Like.objects.filter(user=request.user, post=post).delete()
else:
    Like.objects.create(user=request.user, post=post)
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法,比如get_or_createDjango 提供的方法?

django

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

Python布尔变量,True,False和None

I have a boolean variable named mapped_filter. If I am not wrong, this variable can hold 3 values, either True, False or None.

I want to differentiate each of the 3 possible values in an if statement. Is there a better way to achieve that than doing the following?

if mapped_filter:
    print("True")
elif mapped_filter == False:
    print("False")
else:
    print("None")
Run Code Online (Sandbox Code Playgroud)

python

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