小编Iva*_*ylo的帖子

ASCII上的几何平均值更快

是否可以加速以下代码,但不使用外部模块(NumPy等)?只是简单的Python.两条思路:加速计算

chr(int(round( multiplOrds**(1.0/DLen), 0) ) )
Run Code Online (Sandbox Code Playgroud)

或更快地建立所需的结构.目的是找到ASCII符号的ord()的几何平均值,并将其报告为圆值(符号).len(InDict)是高于1的任何东西.例子的结果应该是

KM<I
Run Code Online (Sandbox Code Playgroud)

代码:

def GA():
    InStr="0204507890"
    InDict={
       0:"ABCDEFGHIJ",
       1:"KLMNOPQRST",
       2:"WXYZ#&/()?"
       }

    OutStr = ""

    DLen = len(InDict)
    for pos in zip(InStr, *InDict.values()):
        if pos[0]=="0":
            multiplOrds = 1
            for mul in (ord(char) for char in pos[1:] if char!="!"): multiplOrds*=mul
            OutStr+= chr(int(round( multiplOrds**(1.0/DLen), 0) ) )

    return OutStr

if __name__ == '__main__':
    import timeit
    print(timeit.timeit("GA()", setup="from __main__ import GA"))
Run Code Online (Sandbox Code Playgroud)

python

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

列表理解中的浅复制或深复制

如果你有一个 python 列表(原始),例如:

class CustomID (object):                   
    def __init__(self, *args):
        self.ID = ''
        self.manymore = float()
        self.visited = False
        self.isnoise = False
IDlist = ['1','2','3','4','5','6','7','8','9','10']
Original = list()
for IDs in IDlist:
    NewObject = CustomID()
    NewObject.ID = IDs
    Original.append(NewObject)
Run Code Online (Sandbox Code Playgroud)

如果您对新列表和要在理解子列表上使用的函数进行理解:

def Func(InputList=list()):
    for objects in InputList:
        objects.visited = True
    return InputList
New_List = [member for member in Original if (int(member.ID)>5)]
ThirdList = Func(New_List)
Run Code Online (Sandbox Code Playgroud)

这(New_List)会导致原始列表的浅副本还是深副本?这个问题与我相关,如果原始列表包含对象,则可以在代码中更改哪些属性以跟随 New_List 创建(ThirdList)。New_list 被发送到一个函数,该函数将更改属性。问题是,如果您尝试以不同的理解重用同一函数的原始列表(假设(成员> 4))。

New_List = [member for member in Original if (int(member.ID)>4)]
Run Code Online (Sandbox Code Playgroud)

实际上:

print New_List[3].visited
Run Code Online (Sandbox Code Playgroud)

给出 …

python list-comprehension list python-2.7

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

"不平等"或"大于"更快?

我想知道对于元组(也用于列表或int),以下哪个更快完成:

a_tuple = ('a', 'b',)
Run Code Online (Sandbox Code Playgroud)
  1. if (len(a_tuple) != 0): pass

  2. if (len(a_tuple) > 0): pass

我做了一些timeit实验,结果非常相似(每次运行10000次迭代时都会有所不同).我只是想知道是否有时间的好处.

python python-2.7 python-3.x

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