标签: list-comprehension

Python(列表理解):为每个项目返回两个(或更多)项目

是否可以为列表理解中的每个项目返回2个(或更多)项目?

我想要的(例子):

[f(x), g(x) for x in range(n)]
Run Code Online (Sandbox Code Playgroud)

应该回来 [f(0), g(0), f(1), g(1), ..., f(n-1), g(n-1)]

所以,要替换这段代码:

result = list()
for x in range(n):
    result.add(f(x))
    result.add(g(x))
Run Code Online (Sandbox Code Playgroud)

python list-comprehension

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

是Python列表理解,可以访问索引/枚举吗?

考虑下面的Python代码,我在新的list2中添加了所有项目,索引从list1的1到3:

for ind, obj in enumerate(list1):
    if 4> ind > 0: list2.append(obj)
Run Code Online (Sandbox Code Playgroud)

如果我无法通过枚举访问索引,你会如何使用python list comprehension编写这个?

就像是:

list2 = [x for x in list1 if 4>ind>0]
Run Code Online (Sandbox Code Playgroud)

但由于我没有'ind'号码,这会有效吗?:

list2 = [x for x in enumerate(list1) if 4>ind>0]
Run Code Online (Sandbox Code Playgroud)

python indexing list-comprehension list

79
推荐指数
4
解决办法
5万
查看次数

list()比列表理解使用更多的内存

所以我正在玩list对象,并发现一些奇怪的事情,如果list创建list()它使用更多的内存,而不是列表理解?我正在使用Python 3.5.2

In [1]: import sys
In [2]: a = list(range(100))
In [3]: sys.getsizeof(a)
Out[3]: 1008
In [4]: b = [i for i in range(100)]
In [5]: sys.getsizeof(b)
Out[5]: 912
In [6]: type(a) == type(b)
Out[6]: True
In [7]: a == b
Out[7]: True
In [8]: sys.getsizeof(list(b))
Out[8]: 1008
Run Code Online (Sandbox Code Playgroud)

来自文档:

列表可以通过以下几种方式构建:

  • 使用一对方括号表示空列表: []
  • 使用方括号,用逗号分隔项目:[a],[a, b, c]
  • 使用列表理解: [x for x in iterable]
  • 使用类型构造函数:list()list(iterable)

但似乎使用list()它会占用更多内存. …

python cpython list-comprehension list python-internals

78
推荐指数
2
解决办法
3295
查看次数

在Python中没有[]的列表理解

加入清单:

>>> ''.join([ str(_) for _ in xrange(10) ])
'0123456789'
Run Code Online (Sandbox Code Playgroud)

join 必须采取迭代.

显然,join这个论点是[ str(_) for _ in xrange(10) ],这是一个列表理解.

看这个:

>>>''.join( str(_) for _ in xrange(10) )
'0123456789'
Run Code Online (Sandbox Code Playgroud)

现在,join这个论点只是str(_) for _ in xrange(10),不[],但结果是一样的.

为什么?是否str(_) for _ in xrange(10)也会产生一个列表或一个可迭代?

python list-comprehension

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

为什么列表推导写入循环变量,但生成器不写?

如果我对列表推导做了些什么,它会写入一个局部变量:

i = 0
test = any([i == 2 for i in xrange(10)])
print i
Run Code Online (Sandbox Code Playgroud)

这打印"9".但是,如果我使用生成器,它不会写入局部变量:

i = 0
test = any(i == 2 for i in xrange(10))
print i
Run Code Online (Sandbox Code Playgroud)

这打印"0".

这种差异有什么好的理由吗?这是设计决策,还是生成器和列表推导的实现方式的随机副产品?就个人而言,如果列表推导没有写入局部变量,那对我来说似乎更好.

python list-comprehension generator python-2.7

76
推荐指数
3
解决办法
2331
查看次数

使用列表理解嵌套循环

如果我有两个字符串,'abc'并且'def',我可以使用两个for循环获得它们的所有组合:

for j in s1:
  for k in s2:
    print(j, k)
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够使用列表理解来做到这一点.我尝试了很多方法,但从未设法得到它.有谁知道如何做到这一点?

python for-loop list-comprehension

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

为什么Pylint不喜欢内置函数?

我有这样一条线:

filter(lambda x: x == 1, [1, 1, 2])
Run Code Online (Sandbox Code Playgroud)

Pylint正在显示警告:

W:  3: Used builtin function 'filter'
Run Code Online (Sandbox Code Playgroud)

这是为什么?列表理解推荐的方法是什么?

当然我可以像这样重写:

[x for x in [1, 1, 2] if x == 1]
Run Code Online (Sandbox Code Playgroud)

而且我没有收到任何警告,但我想知道是否有这样的PEP?

python list-comprehension pylint

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

PHP是否具有Python的列表推导语法?

Python具有语法上的甜蜜列表理解:

S = [x**2 for x in range(10)]
print S;
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Run Code Online (Sandbox Code Playgroud)

在PHP中我需要做一些循环:

$output = array();
$Nums = range(0,9);

foreach ($Nums as $num) 
{
    $out[] = $num*=$num;
}
print_r($out);
Run Code Online (Sandbox Code Playgroud)

要得到:

数组([0] => 0 [1] => 1 [2] => 4 [3] => 9 [4] => 16 [5] => 25 [6] => 36 [7] => 49 [8] => 64 [9] => 81)

反正有没有在PHP中获得类似的列表理解语法?无论如何使用PHP 5.3中的任何新功能吗?

谢谢!

php arrays language-comparisons list-comprehension higher-order-functions

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

如何绕过在for循环中声明一个未使用的变量?

如果我有一个列表理解(例如)像这样:

['' for x in myList]
Run Code Online (Sandbox Code Playgroud)

有效地为列表中的每个元素创建一个具有空字符串的新列表,我从不使用x.有没有更简洁的方法来写这个,所以我不必声明未使用的x变量?

python list-comprehension

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

了解嵌套列表理解

我想了解嵌套列表理解.下面,我列出了一个列表推导表达式和它们的for循环等价物.
我想知道我的理解是否正确.

例如,

[(min([row[i] for row in rows]),max([row[i] for row in rows])) 
for i in range(len(rows[0]))]
Run Code Online (Sandbox Code Playgroud)

相当于

result=[]
for i in range(len(rows[0])):
  innerResult=[]
  for row in rows:
    innerResult.append(row[i])
  innerResult2=[]
  for row in rows:
    innerResult2.append(row[i])
  tuple=(min(innerResult), max(innerResult2))
  result.append(tuple)
Run Code Online (Sandbox Code Playgroud)

如果我可以概括,我想

[exp2([exp1 for x in xSet]) for y in ySet]
Run Code Online (Sandbox Code Playgroud)

表格可以翻译成以下内容.(我希望我对此是正确的)

result=[]
for y in ySet:
  innerResult =[]
  for x in xSet:
    innerResult.append(exp1)
  exp2Result = exp2(innerResult)
  result.append(exp2Result)
Run Code Online (Sandbox Code Playgroud)

对于更简单的情况,

[exp1 for x in xSet for y in ySet] 
Run Code Online (Sandbox Code Playgroud)

等于

result=[] 
for x in xSet: …
Run Code Online (Sandbox Code Playgroud)

python nested list-comprehension

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