可能重复:
Python中的转置/解压缩功能
我有一个元组列表,我想将这个列表解压缩到两个独立的列表中.我正在寻找Python中的一些标准化操作.
>>> l = [(1,2), (3,4), (8,9)]
>>> f_xxx (l)
[ [1, 3, 8], [2, 4, 9] ]
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种简洁和pythonic的方法来实现这一目标.
基本上,我正在寻找zip()
函数的逆运算.
在Python中,您可以在列表推导中使用多个迭代器,例如
[(x,y) for x in a for y in b]
Run Code Online (Sandbox Code Playgroud)
对于一些合适的序列a和b.我知道Python列表推导的嵌套循环语义.
我的问题是:理解中的一个迭代器可以指向另一个吗?换句话说:我可以这样:
[x for x in a for a in b]
Run Code Online (Sandbox Code Playgroud)
外循环的当前值是内部的迭代器?
例如,如果我有一个嵌套列表:
a=[[1,2],[3,4]]
Run Code Online (Sandbox Code Playgroud)
列表理解表达式将实现此结果:
[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
?? (请仅列出理解答案,因为这是我想要找到的).
我有这个嵌套列表:
l = [['40', '20', '10', '30'], ['20', '20', '20', '20', '20', '30', '20'], ['30', '20', '30', '50', '10', '30', '20', '20', '20'], ['100', '100'], ['100', '100', '100', '100', '100'], ['100', '100', '100', '100']]
Run Code Online (Sandbox Code Playgroud)
现在,我想要做的是将列表中的每个元素转换为float.我的解决方案是:
newList = []
for x in l:
for y in x:
newList.append(float(y))
Run Code Online (Sandbox Code Playgroud)
但这可以使用嵌套列表理解来完成,对吗?
我所做的是:
[float(y) for y in x for x in l]
Run Code Online (Sandbox Code Playgroud)
但结果是一堆100的总和2400.
任何解决方案,将非常感谢解释.谢谢!
这是我试图变成列表理解的代码:
table = ''
for index in xrange(256):
if index in ords_to_keep:
table += chr(index)
else:
table += replace_with
Run Code Online (Sandbox Code Playgroud)
有没有办法将else语句添加到此理解中?
table = ''.join(chr(index) for index in xrange(15) if index in ords_to_keep)
Run Code Online (Sandbox Code Playgroud) 有一个iterator
对象,有没有比列表理解更快,更好或更正确的东西来获取迭代器返回的对象列表?
user_list = [user for user in user_iterator]
Run Code Online (Sandbox Code Playgroud) 如何从类定义中的列表推导中访问其他类变量?以下适用于Python 2但在Python 3中失败:
class Foo:
x = 5
y = [x for i in range(1)]
Run Code Online (Sandbox Code Playgroud)
Python 3.2给出了错误:
NameError: global name 'x' is not defined
Run Code Online (Sandbox Code Playgroud)
尝试Foo.x
也不起作用.有关如何在Python 3中执行此操作的任何想法?
一个稍微复杂的激励示例:
from collections import namedtuple
class StateDatabase:
State = namedtuple('State', ['name', 'capital'])
db = [State(*args) for args in [
['Alabama', 'Montgomery'],
['Alaska', 'Juneau'],
# ...
]]
Run Code Online (Sandbox Code Playgroud)
在这个例子中,apply()
本来是一个不错的解决方法,但它遗憾地从Python 3中删除.
它更多的是关于python列表理解语法.我有一个列表理解,可以生成给定范围的奇数列表:
[x for x in range(1, 10) if x % 2]
Run Code Online (Sandbox Code Playgroud)
这是一个过滤器 - 我有一个源列表,我删除偶数(if x % 2
).我想在这里使用if-then-else之类的东西.以下代码失败:
>>> [x for x in range(1, 10) if x % 2 else x * 100]
File "<stdin>", line 1
[x for x in range(1, 10) if x % 2 else x * 100]
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
有一个像if-else的python表达式:
1 if 0 is 0 else 3
Run Code Online (Sandbox Code Playgroud)
如何在列表理解中使用它?
python list-comprehension ternary-operator conditional-operator
在Python的性能方面,是一个列表理解,还是比for循环更快的map(),filter()和reduce()等函数?从技术上讲,为什么它们"以C速度运行",而"for循环以python虚拟机速度运行"?
假设在我正在开发的游戏中,我需要使用for循环绘制复杂且巨大的地图.这个问题肯定是相关的,因为如果列表理解确实更快,那么为了避免滞后(尽管代码的视觉复杂性),这将是一个更好的选择.
我正在尝试从csv文件创建一个字典.csv文件的第一列包含唯一键,第二列包含值.csv文件的每一行代表字典中唯一的键值对.我试图使用csv.DictReader
和csv.DictWriter
类,但我只能弄清楚如何为每一行生成一个新的字典.我想要一本字典.这是我尝试使用的代码:
import csv
with open('coors.csv', mode='r') as infile:
reader = csv.reader(infile)
with open('coors_new.csv', mode='w') as outfile:
writer = csv.writer(outfile)
for rows in reader:
k = rows[0]
v = rows[1]
mydict = {k:v for k, v in rows}
print(mydict)
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,我得到了一个ValueError: too many values to unpack (expected 2)
.如何从csv文件创建一个字典?谢谢.
让我们假设我有一个这样的列表:
mylist = ["a","b","c","d"]
Run Code Online (Sandbox Code Playgroud)
要获得打印的值及其索引,我可以enumerate
像这样使用Python的函数
>>> for i,j in enumerate(mylist):
... print i,j
...
0 a
1 b
2 c
3 d
>>>
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试在里面使用它时,list comprehension
它给了我这个错误
>>> [i,j for i,j in enumerate(mylist)]
File "<stdin>", line 1
[i,j for i,j in enumerate(mylist)]
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:在列表理解中使用枚举的正确方法是什么?
python ×10
list ×3
csv ×1
dictionary ×1
for-loop ×1
iteration ×1
iterator ×1
map-function ×1
nested ×1
performance ×1
python-3.x ×1
scope ×1
tuples ×1