小编Cra*_*ler的帖子

一行Python代码可以知道它的缩进嵌套级别吗?

从这样的事情:

print(get_indentation_level())

    print(get_indentation_level())

        print(get_indentation_level())
Run Code Online (Sandbox Code Playgroud)

我想得到这样的东西:

1
2
3
Run Code Online (Sandbox Code Playgroud)

代码可以用这种方式读取自己吗?

我想要的是更嵌套的代码嵌套部分的输出.与使代码更易于阅读的方式相同,它将使输出更易于阅读.

当然,我可以手动实现,例如.format(),但我想到的是一个自定义打印功能,print(i*' ' + string)其中i缩进级别.这将是在我的终端上进行可读输出的快速方法.

有没有更好的方法来避免辛苦的手动格式化?

python reflection metaprogramming indentation tokenize

146
推荐指数
5
解决办法
7260
查看次数

学习python并试图实现scrapy ..抱怨这个错误

我正在阅读scrapy教程http://doc.scrapy.org/en/latest/intro/tutorial.html ,我一直跟着它直到我运行这个命令

scrapy crawl dmoz
Run Code Online (Sandbox Code Playgroud)

它给了我输出错误

2013-08-25 13:11:42-0700 [scrapy] INFO: Scrapy 0.18.0 started (bot: tutorial)
2013-08-25 13:11:42-0700 [scrapy] DEBUG: Optional features available: ssl, http11
2013-08-25 13:11:42-0700 [scrapy] DEBUG: Overridden settings: {'NEWSPIDER_MODULE': 'tutorial.spiders', 'SPIDER_MODULES': ['tutorial.spiders'], 'BOT_NAME': 'tutorial'}
2013-08-25 13:11:42-0700 [scrapy] DEBUG: Enabled extensions: LogStats, TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState
Traceback (most recent call last):
  File "/usr/local/bin/scrapy", line 4, in <module>
    execute()
  File "/Library/Python/2.7/site-packages/scrapy/cmdline.py", line 143, in execute
    _run_print_help(parser, _run_command, cmd, args, opts)
  File "/Library/Python/2.7/site-packages/scrapy/cmdline.py", line 88, in _run_print_help
    func(*a, **kw) …
Run Code Online (Sandbox Code Playgroud)

python scrapy scrapyd

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

TypeError:str对象不是迭代器

我有一个由单词组成的文件,每行一个单词.该文件如下所示:

aaa
bob
fff
err
ddd
fff
err
Run Code Online (Sandbox Code Playgroud)

我想计算一对一出现的单词的频率.

例如,

aaa,bob: 1
bob,fff:1
fff,err:2
Run Code Online (Sandbox Code Playgroud)

等等.我试过这个

f=open(file,'r')
content=f.readlines()
f.close()
dic={}
it=iter(content)
for line in content:
    print line, next(line);
    dic.update({[line,next(line)]: 1})
Run Code Online (Sandbox Code Playgroud)

我收到了错误:

TypeError: str object is not an iterator
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用迭代器:

it=iter(content)
for x in it:
    print x, next(x);
Run Code Online (Sandbox Code Playgroud)

再次遇到同样的错误.请帮忙!

python dictionary iterator generator

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

更好地替代大量的IF语句?价值表

我有一个移动表来决定玩家是否根据他们对AI的选择而获胜.Think Rock,Paper,Scissors有很多动作.我最终将用Python编写它,但在开始之前,我想知道是否有更好的方法来做这个而不是很多和很多IF语句?

该表如下所示:

在此输入图像描述

我认为这些动作需要分配数字,或类似的东西?我不知道从哪里开始......

python algorithm dictionary if-statement

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

双循环需要时间

我有一个脚本需要花费很多时间,并且在2天之后无法完成...我将1个文件解析为2个字典,如下所示:

gfftree = {'chr1':[(gene_id, gstart, gend),...], 'chr2':[(gene_id, gstart, gend),...],...}
TElocation = {'chr1':[(TE_id, TEstart, TEend),...], 'chr2':[(TE_id, TEstart, TEend),...],...}
Run Code Online (Sandbox Code Playgroud)

.

- 目的是找到TE_id,其TEstart或TEend或两者都位于每个chr(密钥)中的gene_id'gstart和gend之间.

以上内容应更改为"查找TE_id,其范围(TEstart,TEend)与任何gene_id的范围重叠(gstart,gend)"

这是我的代码:

TE_in_TSS = []
for TErange in TElocation[chromosome]:
    TE_id, TEstart, TEend = TErange
    for item in gfftree[chromosome]:
        gene, gstart, gend = item       
        if len(list(set(range(int(gstart),int(gend)+1)) & set(range(int(TEstart),int(TEend)+1)))) > 0:
            TE_in_TSS.append((gene, TE_id, TEstart, TEend))
        else:
            pass
Run Code Online (Sandbox Code Playgroud)

到目前为止,我确信这个循环对于小数据很好,但是当涉及到800,000 TE_id和4,000 gene_id等更大的循环时,需要时间......而且我不知道它是否可以完成......

python for-loop

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

函数名和参数之间的Python方括号:func [...](...)

我正在学习如何从这款笔记本上加速GPU上的py​​thon计算,其中一行令我困惑:

mandel_kernel[griddim, blockdim](-2.0, 1.0, -1.0, 1.0, d_image, 20)
Run Code Online (Sandbox Code Playgroud)

在此,mandel_kernel是一个装饰(通过cuda.jit)的功能,griddimblockdim是长度为2的元组:griddim=(32,16),blockdim=(32,8).

这个方括号是在python语法的函数名和参数列表部分之间,还是特定于cuda.jit装饰的东西?

python python-decorators numba numba-pro

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

如何在python中查找字典列表中的累计项目总和

我有一个类似的列表

a=[{'time':3},{'time':4},{'time':5}]
Run Code Online (Sandbox Code Playgroud)

我想像这样以相反的顺序得到值的累积和

b=[{'exp':3,'cumsum':12},{'exp':4,'cumsum':9},{'exp':5,'cumsum':5}]
Run Code Online (Sandbox Code Playgroud)

获得这个的最有效方法是什么?我已经阅读了其他答案,其中使用numpy给出了解决方案

a=[1,2,3]
b=numpy.cumsum(a)
Run Code Online (Sandbox Code Playgroud)

但我也需要在字典中插入cumsum

python dictionary numpy deque pandas

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

队列和集Python之间的区别

如果存在多线程和一个向列表添加值的函数以及另一个获取该值的函数.与之不同的是:

import queue
scrape = queue.Queue()
def scrape():
    scrape.put('example')
def send():
    example = scrape.get()
    print (example)

scrape = set([])
def scrape():
    scrape.add('example')
def send():
    example = scrape.pop()
    print (example)
Run Code Online (Sandbox Code Playgroud)

为什么人们使用170-180行的队列模块,如果条件减慢了这种情况的过程,如果他们可以使用集合,这也给了他们重复过滤的优势.

python queue multithreading set

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

Python - 允许的变量值

如何明确定义给定变量可以具有哪些值?假设我希望可变大小的值是'small''medium''big'而不是别的。

编辑:我想避免将变量设置为列表之外的内容(例如在这种情况下设置为“小”)的情况。就像 Java 中的枚举一样。这个变量将是一个类字段。

python enums

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