len()关于集合和列表的复杂性同样是O(1).为什么需要更多时间来处理集合?
~$ python -m timeit "a=[1,2,3,4,5,6,7,8,9,10];len(a)"
10000000 loops, best of 3: 0.168 usec per loop
~$ python -m timeit "a={1,2,3,4,5,6,7,8,9,10};len(a)"
1000000 loops, best of 3: 0.375 usec per loop
Run Code Online (Sandbox Code Playgroud)
它是否与特定基准相关,因为它需要更多时间来构建集而不是列表,基准也考虑到了这一点?
如果创建set对象比创建列表需要更多时间,那么潜在的原因是什么?
从我面对Python的那一刻起,我唯一能说的就是"它真棒".我正在使用Django框架,我很惊讶事情发生的速度以及开发人员对这种语言的友好程度.但是从很多方面来说,我听说Python是一种脚本语言,对于小事物,实验等非常有用.
所以问题是可以用Python(和django)构建一个大而重的应用程序吗?由于我主要关注Web开发,此类应用程序的示例可能是Stack Overflow,Facebook,Amazon等.
PS根据许多答案,我可能需要重新解释这个问题.有几个大的应用程序使用Python(最好的例子是You Tube),所以它可以处理它们,但为什么它不像大型项目那样受欢迎(例如)Java,C++和.NET?
我正在学习Python中的正则表达式,我在理解函数时遇到了问题groups().
>>> m = re.match("([abc])+", "abc")
Run Code Online (Sandbox Code Playgroud)
这里我定义了类[abc],据我所知,它是指任何字符a到c.它在一个组内定义,+符号表示我们至少需要一个这样的组.所以我执行以下行,结果是可以理解的:
>>> m.group()
'abc'
>>> m.group(0)
'abc'
Run Code Online (Sandbox Code Playgroud)
我知道为什么会这样.主组的索引为0,'abc'与我们定义的类匹配.到目前为止一直很好,但我不明白为什么以下几行按照他们的方式执行:
>>> m.group(1)
'c'
>>> m.groups()
('c',)
Run Code Online (Sandbox Code Playgroud)
什么是组(1),我在这里只定义了一个组,为什么组功能只有字符'c'?是不是应该返回包含所有组的元组?我想它至少会包含'abc'.
我的朋友写了一个应用程序C,它带有一个GTK在Linux下使用的GUI .现在我们要在python(wxpython或PyQT)中重写GUI .
我没有使用Python的经验,也不知道如何让Python与C进行通信.我想知道这是否可行,如果可以,我该如何实现呢?
我应该编写一个小程序,它接受波斯语文本,并在某些地方将空格更改为半空格。在某些语言中,使用半空格或零宽度非连接符来避免在规范化文本时出现连字。据推测,它的 unicode 字符\'\\u200c\'在某些文本编辑器中可以通过 SHIFT+SPACE 显示在屏幕上:
import re\ntxt = input(\'Please enter a Persian text: \')\noriginal_pattern = r\'\\b(\\w+)\\s*(\xd9\x87\xd8\xa7|\xd9\x87\xd8\xa7\xd9\x8a\xd9\x8a|\xd9\x87\xd8\xa7\xd9\x8a\xd9\x85|\xd9\x87\xd8\xa7\xd9\x8a)\\b\'\nnew_pattern = r\'\\1 \\2\'\nnew_txt = re.sub (original_pattern, new_pattern, txt)\nprint (new_txt) \nRun Code Online (Sandbox Code Playgroud)\n\n在上面的代码中,new_pattern应该在\\1和之间引入一个半空格\\2,目前它们之间有一个空格。
问题是:如何在那里放置半个空格?我尝试了以下方法,在这两种情况下都出现语法错误:
\n\nnew_pattern = ur\'\\1\\u200c\\2\' \n\nnew_pattern = r\'\\1\\u200c\\2\'\nRun Code Online (Sandbox Code Playgroud)\n\n顺便说一句,虽然在 Wikipedia 文章中,ZWNJ 的 unicode 字符被指定为 U+200c,但它在 python shell 中似乎并没有以这种方式工作,而且实际上将空间加倍:
\n\n>>> print (\'He is a\',u\'\\u200c\',\'boy\')\nHe is a \xe2\x80\x8c boy\n\n>>> print ("\xda\xa9\xd8\xaa\xd8\xa7\xd8\xa8",u"\\u200c","\xd9\x87\xd8\xa7")\n\xda\xa9\xd8\xaa\xd8\xa7\xd8\xa8 \xe2\x80\x8c \xd9\x87\xd8\xa7\n\n>>> print ("\xda\xa9\xd8\xaa\xd8\xa7\xd8\xa8 \xd9\x87\xd8\xa7")\n\xda\xa9\xd8\xaa\xd8\xa7\xd8\xa8 \xd9\x87\xd8\xa7\n>>> \n …Run Code Online (Sandbox Code Playgroud) 我有一个xml表格的文件:
<NewDataSet>
<Root>
<Phonemic>and</Phonemic>
<Phonetic>nd</Phonetic>
<Description/>
<Start>0</Start>
<End>8262</End>
</Root>
<Root>
<Phonemic>comfortable</Phonemic>
<Phonetic>comfetebl</Phonetic>
<Description>adj</Description>
<Start>61404</Start>
<End>72624</End>
</Root>
</NewDataSet>
Run Code Online (Sandbox Code Playgroud)
我需要处理它,例如,当用户输入时nd,程序将其与<Phonetic>标签匹配并and从<Phonemic>零件返回.我想也许如果我可以将xml文件转换为字典,我将能够迭代数据并在需要时查找信息.
我搜索并找到了用于相同目的的xmltodict:
import xmltodict
with open(r'path\to\1.xml', encoding='utf-8', errors='ignore') as fd:
obj = xmltodict.parse(fd.read())
Run Code Online (Sandbox Code Playgroud)
运行这个给了我一个ordered dict:
>>> obj
OrderedDict([('NewDataSet', OrderedDict([('Root', [OrderedDict([('Phonemic', 'and'), ('Phonetic', 'nd'), ('Description', None), ('Start', '0'), ('End', '8262')]), OrderedDict([('Phonemic', 'comfortable'), ('Phonetic', 'comfetebl'), ('Description', 'adj'), ('Start', '61404'), ('End', '72624')])])]))])
Run Code Online (Sandbox Code Playgroud)
现在不幸的是,这并没有使事情变得更简单,我不确定如何使用新的数据结构来实现程序.例如要访问nd我必须写:
obj['NewDataSet']['Root'][0]['Phonetic']
Run Code Online (Sandbox Code Playgroud)
这太荒谬了.我试图把它变成一个普通的字典,dict()但由于它是嵌套的,内层保持有序,我的数据是如此之大.
我正在尝试使用 BeautifulSoup 使用以下代码来抓取网页:
import urllib.request
from bs4 import BeautifulSoup
with urllib.request.urlopen("http://en.wikipedia.org//wiki//Markov_chain.htm") as url:
s = url.read()
soup = BeautifulSoup(s)
with open("scraped.txt", "w", encoding="utf-8") as f:
f.write(soup.get_text())
f.close()
Run Code Online (Sandbox Code Playgroud)
问题是它保存的是维基百科的主页而不是特定的文章。为什么该地址不起作用?我应该如何更改它?
我正在尝试编写一个简单的Python程序.它应该返回一个返回连续的斐波纳契数的闭包:
def fibGen():
n_1 = 0
n_2 = 0
n = 1
def fib():
if n_1 ==0 and n_2 ==0:
n_1 = 1
return n
else:
n = n_1 + n_2
n_2 = n_1
n_1 = n
return n
return fib
f = fibGen()
for i in range(0,10):
print(f())
Run Code Online (Sandbox Code Playgroud)
我在运行时收到此错误:
UnboundLocalError: local variable 'n_1' referenced before assignment
编辑:在我的原始帖子中,我没有包含n = 1在定义中,fibGen但它实际上是一个错字.无论如何我仍会得到同样的错误.
我知道当我们使用时*args,这意味着我们不确定该函数将接收多少个参数.但是,Python最终将它们绑定在一个元组中:
>>> def f(*args):
return type(args)
>>> f(3,4,4,5)
<class 'tuple'>
Run Code Online (Sandbox Code Playgroud)
假设我有一个简单的函数,它返回输入不变.我可以像这样使用嵌套的lambda:
>>> def f (x):
return x
>>> l = f(lambda x: len(x))
>>>
>>> l((1,2,3))
3
Run Code Online (Sandbox Code Playgroud)
请注意,输入是一个元组.但是,当我尝试使用以下函数编写相同的函数时会发生这种情况args:
>>> def f (*args):
return args
>>> l = f(lambda x: len(x))
>>> l((1,2,3))
Traceback (most recent call last):
File "<pyshell#106>", line 1, in <module>
l((1,2,3))
TypeError: 'tuple' object is not callable
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误,我该如何避免?
我有一个 python 文件,其中A定义的类与我正在工作的目录不同。我想在我的脚本中从该类导入一个模块。我在 jupyter 中写了这样的东西:
import os
parent_dir = 'path/to/class'
os.chdir(parent_dir)
from A import a
Run Code Online (Sandbox Code Playgroud)
它工作得很好,我可以执行程序。但是,当我从终端在同一目录中运行脚本时,出现此错误:
ModuleNotFoundError: No module named 'a'
Run Code Online (Sandbox Code Playgroud)
我os.getcwd()在错误之前放了一个以确保它在同一目录中,当我从终端转到该目录并直接导入模块时,没有错误。我想知道为什么在运行脚本时会出现此错误。
python ×10
python-3.x ×5
regex ×2
args ×1
c ×1
closures ×1
dictionary ×1
django ×1
fibonacci ×1
importerror ×1
lambda ×1
pyqt ×1
tuples ×1
unicode ×1
web-scraping ×1
wxpython ×1
xml ×1
xml-parsing ×1
xmltodict ×1