小编Bor*_*jaX的帖子

查看字符串列表时更快的是什么?"在"或"索引"?

我有一堆字符串列表,我需要知道一个字符串是否在其中任何一个所以我必须在第一个列表中找到字符串,如果没有找到,在第二个列表中,如果没有找到,则在第三个列表中查找. .. 等等.

我的问题是:什么更快?

if (string in stringList1):
    return True
else:
    if (string in stringList2):
        return True
    # ... #
Run Code Online (Sandbox Code Playgroud)

依此类推或在try/except块中使用index()函数?

try:
    return stringList1.index(string) >= 0
except:
    try:
        return stringList2.index(string) >= 0
    except:
       # ... #
Run Code Online (Sandbox Code Playgroud)

我知道"in"是线性的,通常python建议"比请求许可更好说抱歉"(意思是第二种方法会更好)但我想知道更合格的人的意见:)

谢谢!

python string performance search list

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

CSS样式继承/重载

我有一个网页,在某一点上,显示一个导航栏,它只不过是一个元素的列表(ul).大多数的风格规则说一个元素是常见的.应该更改的唯一部分是要显示的图像,可以从列表的每个li元素的id标记中猜出.

所以这就是问题:

是否有CSS的方式来定义一个类似"基地"的风格为所有的一个元素,然后根据ID集合的形象呢?也许不是(CSS控件继承 - 继承其他控件样式),但我想确定.

我试过了:

#nav li a {
    /*This would be the 'base' For all the "a"s inside a 
      list inside an element with id=nav (nav -> navigation)*/
 background-color: transparent;
 background-repeat: no-repeat;
 background-position: 0 -58px;
 border-left: thin #444444 solid;
}


#nav li#settings a {
 background: url(../images/nav_settings.png);
}

#nav li#media a {
 background: url(../images/nav_media.png);
}

#nav li#user a {
 background: url(../images/nav_admin.png);
}
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用......"基础"风格被覆盖......

先感谢您!

css inheritance stylesheet

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

Python的好奇心:[]> lambda n:n

我的一个同事正在使用内置的max函数(在Python 2.7上),他发现了一个奇怪的行为.

错误地,他没有使用关键字参数(如key=lambda n: n)来预先对作为参数传递的列表进行排序,而是:

 >>> max([1,2,3,3], lambda n : n)
[1, 2, 3, 3]
Run Code Online (Sandbox Code Playgroud)

他正在做的文档解释如下:

如果提供了两个或多个位置参数,则返回最大的位置参数.,所以现在我很好奇为什么会这样:

>>> (lambda n:n) < []
True
>>> def hello():
...     pass
... 
>>> hello < []
True
>>> len(hello)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'function' has no len()
Run Code Online (Sandbox Code Playgroud)

我知道这不是什么大不了的事,但是如果任何stackoverflowers可以解释这些比较是如何在内部进行的(或者指向我可以找到该信息的方向),我会很感激.:-)

先感谢您!

python lambda list comparison-operators

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

Mongodb:如何将某些记录的某些字段设为大写?

我知道这是一个非常简单的问题,但我似乎无法找到满意的答案。另外,我是 Mongo 的新手。这显然没有帮助。

假设我有一组...用户,我想将mongo 中的$toUppername函数应用于带有_id 的记录字段ObjectId(1)ObjectId(2)但不应用于带有ObjectId(3).

所以我有这个:

{
    [
        {
            "_id": ObjectId("1"),
            "name": "user 1",
            "address": "Street 1"
        },
        {
            "_id": ObjectId("2"),
            "name": "user 2",
            "address": "Street 2"
        },
        {
            "_id": ObjectId("3"),
            "name": "user 3",
            "address": "Street 3"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想要:

{
    [
        {
            "_id": ObjectId("1"),
            "name": "USER 1",
            "address": "Street 1"
        },
        {
            "_id": ObjectId("2"),
            "name": "USER 2",
            "address": "Street 2"
        },
        {
            "_id": ObjectId("3"),
            "name": "user 3",
            "address": …
Run Code Online (Sandbox Code Playgroud)

replace mongodb

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

Tastypie:不要发送整个uri资源(只是id)

我开始将Tastypie添加到我正在开发的一个非常小的Django应用程序中,我想知道是否有一种方法只发送一个关系所指向的资源的数字id,而不是资源所在的uri.

例如,使用文档中提供的示例之一:

暴露的"Entry"资源如下所示:

{
    "body": "Welcome to my blog!",
    "id": "1",
    "pub_date": "2011-05-20T00:46:38",
    "resource_uri": "/api/v1/entry/1/",
    "slug": "first-post",
    "title": "First Post",
    "user": "/api/v1/user/1/"
}
Run Code Online (Sandbox Code Playgroud)

它与"用户"的关系显示为 "user": "/api/v1/user/1/".有没有任何方法可以制作它"user": 1(整数,如果可能的话),所以它看起来像以下?

{
    "body": "Welcome to my blog!",
    "id": "1",
    "pub_date": "2011-05-20T00:46:38",
    "resource_uri": "/api/v1/entry/1/",
    "slug": "first-post",
    "title": "First Post",
    "user": 1
}
Run Code Online (Sandbox Code Playgroud)

我喜欢这个想法或者保持resource_uri属性是完整的,但是当涉及到建模Sql关系时,我宁愿只有id(或者数字id的列表,如果关系是" ToMany ").dehydrate_userEntryResource类添加方法是否是个好主意?它似乎工作,但也许有一种更通用的方式(避免必须dehydrate为每个关系编写一个方法)

先感谢您

python formatting tastypie

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

UDP Socketserver-通过同一套接字发送数据(不可能吗?)

我有一台可能位于多个防火墙后面的计算机,只有一个专用IP ...几乎无法从外部访问。

该计算机会定期将UDP数据发送到远程服务器(可从任何地方访问)。该远程服务器可能与UDP发送者/客户端位于不同的网络中(或与此不同的国家/地区)。

在某个时候,我必须发送一个程序包,确认我已收到一些数据回“无法访问的”计算机,这意味着:客户端开始通信,并且我确实有一个套接字。

我很害怕答案,因为我读到的UDP协议主要是发送->断开连接->忘记软件包,但这是问题所在。是否可以使用现有的UDP套接字发送数据?

作为服务器,我正在使用一个非常简单的SocketServer类:

class MyUDPHandler(SocketServer.BaseRequestHandler):

    def handle(self):
        message_type = message_utils.extract_type(self.request[0])
        message_cls = message_factory.get_class_by_message_type(message_type)
        message = message_cls(
                              data=self.request[0],
                              came_from=self.client_address)
        print "Got %s" % message
        message.process()
        self.request[1].send("test") 

if __name__ == "__main__":
    SERVER_HOST = settings.SERVER_HOST\
                        if hasattr(settings, "SERVER_HOST") else ""
    SERVER_PORT = int(settings.SERVER_PORT)
    server = SocketServer.UDPServer(
                                    (SERVER_HOST, SERVER_PORT),
                                    MyUDPHandler)
    server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

该行self.request[1].send("test")失败并显示错误:[Errno 89] Destination address required我了解得越多,我就越无法将数据发送回客户端,至少不是通过这种简单的send解决方案。

我无法更改客户端。有什么方法可以重复使用套接字来发送UDP数据吗?也许有一个我不知道的“救世主”课程?任何提示将不胜感激。

先感谢您。

python sockets udp request

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

检查列表中是否有项目,如果True则修改它

list1 = [1,2,3]
def ex(example_list):
     for number in example_list:
         if(number == 2):
              number = 3

ex(list1)
print(list1)
Run Code Online (Sandbox Code Playgroud)

我需要检查list1中是否有数字2,如果它在里面,我想将它修改为3.
但是如果我运行命令,那number将是3,但是list1会保留[1,2,3]而不是[1,3,3]

python

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

当有针对它们的getter/setter时访问私有变量

我有一个关于在Python中编程的正确方法的问题......也许可以有几种不同的意见,但在这里:

比方说,我有一个类与一对夫妇的私人属性,并且,我已经实现了两个getter/setter方法(不超载__getattr____setattr__,但在一个更加"Java的tistic"的风格):

class MyClass:

    def __init__(self):   
        self.__private1 = "Whatever1"

    def setPrivate1(self, private1):
        if isinstance(private1, str) and (private1.startswith("private")):
            self.__private1 = private1
        else:
            raise AttributeError("Kaputt")

    def getPrivate1(self):
        return self.__private1
Run Code Online (Sandbox Code Playgroud)

现在让我们说下面几行,在同一个类的另一个方法中,我需要重新设置"_ private1"的值.由于它是同一个类,我仍然可以直接访问private属性self._private1.

我的问题是:我应该使用:

self.setPrivate1("privateBlaBlaBla")
Run Code Online (Sandbox Code Playgroud)

或者我应该直接访问:

self.__private1 ="privateBlaBlaBla"
Run Code Online (Sandbox Code Playgroud)

因为我是设置新值的人,我知道所说的值("privateBlaBlaBla")是正确的(以"私有"开头的str()),所以它不会让系统不一致.另一方面,如果另一个程序员接受我的代码,并且需要更改self .__ private1属性的功能,他将需要遍历所有代码,并查看__private1的值是否已在其他地方手动设置.

我的猜测是正确的做法是始终使用setPrivate1方法,并且只能直接访问get/set中的__private1变量,但我想知道更有经验的Python程序员的意见.

谢谢!

python oop etiquette private-members

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

仅获取实例的属性

我想知道Python(2.6)中是否有一种方法只能获得实例所具有的属性的名称.

比方说我有:

#!/usr/bin/python2.6

class MyClass(object):
    def __init__(self):   
        self._x = None

    @property
    def x(self):
        return self._x

    @x.setter
    def x(self, value):
        print "Setting x to %s" % (value)
        try:
            self._x = int(value)
        except ValueError:
            self._x = None



#main (test area)
if __name__ == '__main__':
    a = MyClass()
    a.x = "5"
    print str(a.x)
    print "Vars: %s" %vars(a)   
    print "Dir: %s" %dir(a)
Run Code Online (Sandbox Code Playgroud)

哪个输出:

Vars: {'_x': 5}
Dir: ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', …
Run Code Online (Sandbox Code Playgroud)

python properties decorator

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

两个字符串之间的总不匹配

我正在寻找一种方法来查找 python 中两个字符串之间不匹配的总数。我的输入是一个看起来像这样的列表

['sequence=AGATGG', 'sequence=AGCTAG', 'sequence=TGCTAG',
 'sequence=AGGTAG', 'sequence=AGCTAG', 'sequence=AGAGAG']
Run Code Online (Sandbox Code Playgroud)

对于每个字符串,我想看看它与序列有多少差异"sequence=AGATAA"。因此,如果输入[0]来自上面的列表,则输出将如下所示:

sequence=AGATGG, 2
Run Code Online (Sandbox Code Playgroud)

我不知道是否将每个字母拆分为单独的列表,或者是否应该尝试以某种方式比较整个字符串。任何帮助都是有用的,谢谢

python genetics biopython

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

使用 SqlAlchemy 中的项目子集加载“关系”(类似于 Django 的“Prefetch”对象)

backref有没有办法从 SqlAlchemy 中的关系中检索元素子集,但保持创建类时我在(关系)中定义的顺序?

假设我有两个表/模型: AUser和 a UserLog,其中包含用户执行的操作(只是Basedeclarative_base ()

每个日志UserLog都有一个执行操作的 ID 的外键User,并且每个日志的操作类型可以从Enum. 每个用户日志还有一个created我订购的时间戳:在常规情况下,我希望从最旧到最新(最旧的在前)获取日志。

但是,我还希望能够让特定用户仅加载日志的子集(特定操作的日志)。我知道这违背了连接负载的“要点”,因为我会得到不切实际的数据库状态(有更多日志链接到我获取的对象User将反映的用户),但在某些情况下它会很有帮助。

class UserLog(Base):
    __tablename__ = 'user_logs'
    id = Column(UUID(as_uuid=True), primary_key=True)
    timestamp_created = Column(
        DateTime, server_default=sqlalchemy.text("now()")
    )
    user_id = Column(
        UUID(as_uuid=True),
        ForeignKey("users.id", ondelete="CASCADE")
    )
    action = Column(SaEnum(UserLogsConstants), nullable=False)

    user = relationship(
        "User", 
        backref=backref(
          'logs', order_by="asc(UserLog.timestamp_created)"
        ) # The order_by is important here
    )
Run Code Online (Sandbox Code Playgroud)

感谢这个 SO 答案,我已经能够使用 加载日志子集contains_eager,但随后我丢失了timestamp_created …

python sqlalchemy loading relationship

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