小编Omi*_*mid的帖子

len()关于集合和列表的复杂性

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 time-complexity python-3.x python-internals

51
推荐指数
4
解决办法
3773
查看次数

Python对于大型应用程序是否足够好?

从我面对Python的那一刻起,我唯一能说的就是"它真棒".我正在使用Django框架,我很惊讶事情发生的速度以及开发人员对这种语言的友好程度.但是从很多方面来说,我听说Python是一种脚本语言,对于小事物,实验等非常有用.

所以问题是可以用Python(和django)构建一个大而重的应用程序吗?由于我主要关注Web开发,此类应用程序的示例可能是Stack Overflow,Facebook,Amazon等.


PS根据许多答案,我可能需要重新解释这个问题.有几个大的应用程序使用Python(最好的例子是You Tube),所以它可以处理它们,但为什么它不像大型项目那样受欢迎(例如)Java,C++和.NET?

python django web-applications

24
推荐指数
5
解决办法
2万
查看次数

Python中正则表达式中的groups()方法

我正在学习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'.

python regex

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

C程序可以使用Python GUI吗?

我的朋友写了一个应用程序C,它带有一个GTK在Linux下使用的GUI .现在我们要在python(wxpythonPyQT)中重写GUI .

我没有使用Python的经验,也不知道如何让Python与C进行通信.我想知道这是否可行,如果可以,我该如何实现呢?

c python wxpython pyqt

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

正则表达式中的半空格

我应该编写一个小程序,它接受波斯语文本,并在某些地方将空格更改为半空格。在某些语言中,使用半空格或零宽度非连接符来避免在规范化文本时出现连字。据推测,它的 unicode 字符\'\\u200c\'在某些文本编辑器中可以通过 SHIFT+SPACE 显示在屏幕上:

\n\n
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) \n
Run Code Online (Sandbox Code Playgroud)\n\n

在上面的代码中,new_pattern应该在\\1和之间引入一个半空格\\2,目前它们之间有一个空格。

\n\n

问题是:如何在那里放置半个空格?我尝试了以下方法,在这两种情况下都出现语法错误:

\n\n
new_pattern = ur\'\\1\\u200c\\2\'   \n\nnew_pattern = r\'\\1\\u200c\\2\'\n
Run 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)

python regex unicode

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

使用有序字典解析xml文件

我有一个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()但由于它是嵌套的,内层保持有序,我的数据是如此之大.

python xml dictionary xml-parsing xmltodict

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

使用 BeautifulSoup 保存网页内容

我正在尝试使用 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 beautifulsoup web-scraping python-3.x

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

打印出斐波那契系列

我正在尝试编写一个简单的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但它实际上是一个错字.无论如何我仍会得到同样的错误.

python closures fibonacci python-3.x

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

带*args的lambda表达式

我知道当我们使用时*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 lambda tuples args python-3.x

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

os.chdir() 后无法导入模块

我有一个 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 importerror python-3.x

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