小编xss*_*han的帖子

从Python列表中获取前n个唯一元素

我有一个python列表,其中元素可以重复.

>>> a = [1,2,2,3,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

我想n从列表中获取第一个独特的元素.所以,在这种情况下,如果我想要前5个独特元素,它们将是:

[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

我已经提出了使用生成器的解决方案:

def iterate(itr, upper=5):

    count = 0
    for index, element in enumerate(itr):
        if index==0:
            count += 1
            yield element

        elif element not in itr[:index] and count<upper:
            count += 1
            yield element
Run Code Online (Sandbox Code Playgroud)

正在使用:

>>> i = iterate(a, 5)
>>> [e for e in i]
[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

我怀疑这是最优化的解决方案.是否有一种替代策略可以实现以更加pythonic和更有效的方式编写它?

python unique generator set python-3.x

46
推荐指数
7
解决办法
2696
查看次数

Python 3.7:dataclass不会为`eq = False`引发`TypeError`

dataclasses在Python 3.7中尝试新的

dataclass装饰可以传递的参数来控制被添加到类dunder功能.

出于某种原因,装饰似乎并没有提高TypeErroreq=False说法.

根据文档:

eq: If true (the default), an __eq__ method will be generated. 
This method compares the class as if it were a tuple of its fields, in order. 
Both instances in the comparison must be of the identical type
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,如果我通过eq = False,__eq__则不会添加函数,并且TypeError在比较同一类的两个实例时应抛出a .相反,该eq参数似乎没有任何效果.

@dataclass(eq = False)
class Number:
    val: int

a = Number(1)
b = Number(2)
c = Number(1)

a …
Run Code Online (Sandbox Code Playgroud)

python python-3.7 python-dataclasses

25
推荐指数
2
解决办法
1275
查看次数

Python 3.7:Dataclasses和SimpleNameSpace的实用程序

Python 3.7提供了dataclasses具有预定义特殊功能的新功能.

从全局来看,dataclassesSimpleNameSpace都提供了很好的数据封装工厂.

@dataclass
class MyData:
    name:str
    age: int

data_1 = MyData(name = 'JohnDoe' , age = 23)

data_2 = SimpleNameSpace(name = 'JohnDoe' , age = 23)
Run Code Online (Sandbox Code Playgroud)

很多时候我SimpleNameSpace只是用来包装数据并移动它.

我甚至将它子类化为添加特殊功能:

from types import SimpleNameSpace

class NewSimpleNameSpace(SimpleNameSpace):
    def __hash__(self):
        return some_hashing_func(self.__dict__)
Run Code Online (Sandbox Code Playgroud)

对于我的问题:

  1. 有人如何选择SimpleNameSpacedataclasses
  2. 为什么它们是必要的,当扩展时可以达到同样的效果SimpleNameSpace
  3. 所有其他用例dataclasses迎合什么?

python python-3.7 python-dataclasses

17
推荐指数
2
解决办法
1517
查看次数

生成JSON的md5哈希并在Python和JavaScript中进行比较

我有一个用例,我必须生成md5一个JSON对象的哈希值,并比较服务器和浏览器中的哈希值.

浏览器客户端生成哈希,然后向服务器请求相同资源的哈希[恰好是JSON对象],并比较两个哈希以决定下一步做什么.

对于我正在使用的服务器Python和浏览器客户端Javascript.

对我来说,两种情况下产生的哈希都不匹配.这是我的代码:

Python:

>>> import hashlib
>>> import json

>>> a = {"candidate" : 5, "data": 1}
>>> a = json.dumps(a, sort_keys = True).encode("utf-8")
>>> hashlib.md5(a).hexdigest()
>>> 12db79ee4a76db2f4fc48624140adc7e
Run Code Online (Sandbox Code Playgroud)

JS:我在浏览器中使用md5进行散列处理

> var hash = require("md5")
> var data = {"candidate":5, "data":1}
> data = JSON.stringify(data)
> md5(data)
> 92e99f0a99ad2a3b5e02f717a2fb83c2
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

javascript python hash md5

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

python中all()的行为

>>all([])
True
>>all([[]])
False
>>all([[[]]])
True
>>all([[[[]]]])
True
Run Code Online (Sandbox Code Playgroud)

all()的文档读取它返回True是所有元素都是True /对于一个空列表.为什么所有([[]])评估为False?因为[][[]]的成员,所以它也应该评估为True.

python built-in python-3.x

7
推荐指数
2
解决办法
104
查看次数

Django Q对象的相等性

我正在尝试以完全相同的方式比较django的Q对象

但是,尽管所有孩子以及他们之间的关系都是一样的,但他们并没有被视为平等。

from django.db.models import Q

$ q1 = Q(a=1) & Q(b=1) & Q(c=1)

$ q2 = Q(a=1) & Q(b=1) & Q(c=1)

$ q1 == q2

$ False
Run Code Online (Sandbox Code Playgroud)

这在我的单元测试中构成了问题,在该单元测试中,我使用Q对象为查询集构建了过滤器。

为什么两个Q对象不相等?

我正在使用Django 1.11。

python django django-models

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

Python:单个可迭代`list(x)`vs` [x]`的列表

Python似乎区分[x]list(x)创建列表对象时,哪里x是可迭代的.为何如此区别?

>>> a = [dict(a = 1)]
>>> [{'a' : 1}]

>>> a = list(dict(a=1))
>>> a = ['a']
Run Code Online (Sandbox Code Playgroud)

虽然第一个表达式似乎按预期工作,但第二个表达式更像是以这种方式迭代一个字典:

>>> l = []
>>> for e in {'a' :1}:
        l.append(e)
>>> l
>>> ['a']
Run Code Online (Sandbox Code Playgroud)

python list

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