相关疑难解决方法(0)

在每个列表元素上调用int()函数?

我有一个包含数字字符串的列表,如下所示:

numbers = ['1', '5', '10', '8'];
Run Code Online (Sandbox Code Playgroud)

我想将每个列表元素转换为整数,所以它看起来像这样:

numbers = [1, 5, 10, 8];
Run Code Online (Sandbox Code Playgroud)

我可以使用循环来完成它,如下所示:

new_numbers = [];
for n in numbers:
    new_numbers.append(int(n));
numbers = new_numbers;
Run Code Online (Sandbox Code Playgroud)

它必须如此丑陋吗?我确信在一行代码中有更多的pythonic方法可以做到这一点.请帮帮我.

python list

172
推荐指数
5
解决办法
22万
查看次数

Python中方括号和括号括起来的列表有什么区别?

>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2
Run Code Online (Sandbox Code Playgroud)

它们都有效吗?出于某种原因是首选吗?

python list

145
推荐指数
2
解决办法
13万
查看次数

什么是蟒蛇中的Truthy和Falsy?它与真与假有什么不同?

我刚刚才知道有TruthyFalsy在Python这是与正常不同的价值观TrueFalse

是否有人可以深入解释什么truthyfalsy值?

我应该在哪里使用它们?

truthyTrue值以及falsyFalse值之间有什么区别?

python

92
推荐指数
4
解决办法
3万
查看次数

什么时候不是使用python生成器的好时机?

这与你可以使用Python生成器函数什么相反:python生成器,生成器表达式和itertools模块是我最近python的一些特性.它们在设置操作链以在大量数据上执行时特别有用 - 我经常在处理DSV文件时使用它们.

那么什么时候不是使用生成器,生成器表达式或itertools函数的好时机?

  • 当我应该喜欢zip()itertools.izip(),或
  • range()结束xrange(),或
  • [x for x in foo]结束(x for x in foo)

显然,我们最终需要将生成器"解析"为实际数据,通常是通过创建列表或使用非生成器循环对其进行迭代.有时我们只需知道长度.这不是我要问的.

我们使用生成器,因此我们不会将新列表分配给内存以用于临时数据.这对于大型数据集尤其有用.对于小型数据集也有意义吗?有明显的内存/ CPU权衡吗?

考虑到列表理解性能与map()和filter()的开放性讨论,我特别感兴趣的是,如果有人对此做了一些分析.(alt链接)

python optimization iterator generator

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

在Python中分隔行上打印列表元素

我正在尝试使用以下方法打印出Python路径文件夹:

import sys
print sys.path
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

>>> print sys.path
['.', '/usr/bin', '/home/student/Desktop', '/home/student/my_modules', '/usr/lib/pyth
on2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/pyth
on2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/local/lib/python2.6/dist-pack
ages', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/
usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/pymodules/python2.6', '/usr/lib/
python2.6/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/lib/p
ython2.6/dist-packages/wx-2.8-gtk2-unicode']
Run Code Online (Sandbox Code Playgroud)

如何将它们打印成单独的行,以便我可以正确解析它们?

它应该是这样的:

/usr/bin
/home/student/Desktop
/home/student/my_modules
etc
Run Code Online (Sandbox Code Playgroud)

python

73
推荐指数
6
解决办法
16万
查看次数

Python的列表理解与.NET LINQ

以下简单的LINQ代码

string[] words = { "hello", "wonderful", "linq", "beautiful", "world" };

// Get only short words
var shortWords =
  from word in words
  where word.Length <= 5
  select word;

// Print each word out
shortWords.Dump();
Run Code Online (Sandbox Code Playgroud)

可以使用列表推导将其翻译成python,如下所示.

words = ["hello", "wonderful", "linq", "beautiful", "world"]
shortWords = [x for x in words if len(x) <=5]
print shortWords
Run Code Online (Sandbox Code Playgroud)
  • LINQ是另一个实现列表理解的想法吗?
  • LINQ可以做什么样的例子但是列表理解不能做.

c# python linq list-comprehension

54
推荐指数
3
解决办法
2万
查看次数

Python文件Slurp

是否有单行程序来读取Python中文件的所有行,而不是标准:

f = open('x.txt')
cts = f.read()
f.close()
Run Code Online (Sandbox Code Playgroud)

似乎经常这样做,所以必须有一个单行.有任何想法吗?

python file-io

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

列表是否理解为Python 3中的`list(generator expression)`的语法糖?

在Python 3中,列表理解只是语法糖,用于生成list函数的生成器表达式?

例如是以下代码:

squares = [x**2 for x in range(1000)]
Run Code Online (Sandbox Code Playgroud)

实际上在后台转换成以下内容?

squares = list(x**2 for x in range(1000))
Run Code Online (Sandbox Code Playgroud)

我知道输出是相同的,并且Python 3修复了列表推导所具有的周围命名空间的令人惊讶的副作用,但就CPython解释器所做的事情而言,前者转换为后者,或者是否有任何区别在如何执行代码?

背景

我发现,在评论部分等价的这一主张这个问题,和快速谷歌搜索显示了同样的要求正在作出这里.

在Python 3.0文档中的新内容中也提到了这一点,但措辞有些含糊:

还要注意,列表推导具有不同的语义:它们更接近于list()构造函数中的生成器表达式的语法糖,特别是循环控制变量不再泄漏到周围的范围中.

python list-comprehension generator-expression python-3.x python-internals

33
推荐指数
3
解决办法
2249
查看次数

从列表中删除项目时出现奇怪的结果

我有这段代码:

numbers = range(1, 50)

for i in numbers:
    if i < 20:
        numbers.remove(i)

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

但我得到的结果是:

[2,4,6,8,10,12,14,16,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35 ,36,37,38,39,40,41,42,43,44,45,46,47,48,49]

当然我希望结果中没有出现20以下的数字,我假设我在删除时做错了.

python loops list

32
推荐指数
3
解决办法
5844
查看次数

是否需要"使用严格"的Python编译器?

存在用于Python的静态分析工具,但编译时间检查往往与Python所包含的运行时绑定哲学截然相反.这可能与一个静态分析工具来执行一些"包装标准Python解释器使用严格 "般的约束,但我们没有看到任何广泛采用的这样的事情.

有没有关于Python的东西会使"使用严格"的行为变得不必要或特别不受欢迎?

或者,Perl中的"使用严格"行为是否已被广泛采用?

注意:"必要"是指"实际必要",并非绝对必要.显然你可以在没有"use strict"的情况下编写Perl,但是(从我所见过的)大多数Perl程序员都会使用它.

注意:Python解释器包装器不需要 "使用严格"类似的约束 - 您可以使用类似于"use strict"的伪编译指示,这将被普通解释器忽略.我不是在谈论添加语言级功能.


更新:解释Perl每条评论中"use strict"的作用.(官方文档链接在第一段.)

"use strict"指令有三个不同的组件,其中只有两个非常有趣:

  • use strict vars:在程序中静态检查词法范围的变量用法.(请记住,在Python中,基本上只有global范围和local范围).许多Python短信检查这种事情.因为它是他们可以做的唯一的静态分析,所以直言不讳地假设你使用简单的词汇范围,并在你告诉他们闭嘴之前警告你那些看似错误的东西; 即

    FOO = 12
    foo += 3
    
    Run Code Online (Sandbox Code Playgroud)

    如果您没有对命名空间做任何想法,那么检查拼写错误就很有用.

  • use strict refs:防止符号命名空间解除引用.Python最接近的模拟是使用locals()globals()进行符号绑定和标识符查找.

  • use strict subs:在Python中没有真正的模拟.

python compiler-construction perl static-analysis use-strict

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