是否可以加速以下代码,但不使用外部模块(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 列表(原始),例如:
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)
给出 …
我想知道对于元组(也用于列表或int),以下哪个更快完成:
a_tuple = ('a', 'b',)
Run Code Online (Sandbox Code Playgroud)
if (len(a_tuple) != 0): pass
if (len(a_tuple) > 0): pass
我做了一些timeit实验,结果非常相似(每次运行10000次迭代时都会有所不同).我只是想知道是否有时间的好处.