Tag: 列表理解

在Python中列表推导或生成器expression式的续行

你应该如何分解很长的列表理解? [something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long] 我也曾经在某个地方看到,那些不喜欢用'\'来分解线条的人,却从来不明白为什么。 这背后的原因是什么?

在Ruby中列出理解

要做相当于Python列表parsing,我正在做以下事情: some_array.select{|x| x % 2 == 0 }.collect{|x| x * 3} 有没有更好的方法来做到这一点…也许用一个方法调用?

在列表理解中使用枚举的Python

假设我有这样一个列表: mylist = ["a","b","c","d"] 要获得打印的值和它们的索引,我可以像这样使用Python的enumerate函数 >>> for i,j in enumerate(mylist): … print i,j … 0 a 1 b 2 c 3 d >>> 现在,当我尝试在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 所以,我的问题是:在列表理解中使用枚举的正确方法是什么?

将迭代器转换为列表的最快方法

有一个iterator对象,是否有比列表理解更快,更好或更正确的获取迭代器返回的对象的列表? user_list = [user for user in user_iterator]

为什么在Python中没有元组理解?

众所周知,列表理解就像 [i for i in [1, 2, 3, 4]] 有字典理解,就像 {i:j for i, j in {1: 'a', 2: 'b'}.items()} 但 (i for i in (1, 2, 3)) 将最终在一个生成器,而不是一个tuple理解。 这是为什么? 我的猜测是一个tuple是不可变的,但这似乎不是答案。

如何将一个元组列表解压到单个列表中?

可能重复: Python中的转置/解压缩函数 我有一个元组列表,我想把这个列表解压到两个独立的列表中。 我正在寻找一些Python的标准化操作。 >>> l = [(1,2), (3,4), (8,9)] >>> f_xxx (l) [ [1, 3, 8], [2, 4, 9] ] 我正在寻找一个简洁和pythonic的方式来实现这一目标。 基本上,我正在寻找zip()函数的逆操作。

在列表parsing和生成器expression式中的产量

下面的行为对我来说似乎相当不合常理(Python 3.4): >>> [(yield i) for i in range(3)] <generator object <listcomp> at 0x0245C148> >>> list([(yield i) for i in range(3)]) [0, 1, 2] >>> list((yield i) for i in range(3)) [0, None, 1, None, 2, None] 最后一行的中间值实际上并不总是None ,它们是我们send到发生器的任何东西,相当于(我猜)到下面的发生器: def f(): for i in range(3): yield (yield i) 这三条线完全可以工作,这让我觉得很有趣。 Reference指出yield只能在函数定义中允许(虽然我可能读错了,或者它可能只是从旧版本复制而来)。 前两行在Python 2.7中产生了一个SyntaxError ,但是第三行没有。 另外,这似乎很奇怪 列表理解返回一个生成器而不是一个列表 […]

为什么map()和list的理解结果不一样?

以下testing失败: #!/usr/bin/env python def f(*args): """ >>> t = 1, -1 >>> f(*map(lambda i: lambda: i, t)) [1, -1] >>> f(*(lambda: i for i in t)) # -> [-1, -1] [1, -1] >>> f(*[lambda: i for i in t]) # -> [-1, -1] [1, -1] """ alist = [a() for a in args] print(alist) if […]

理解扁平序列的序列?

如果我有序列序列(也许是一个元组列表),我可以使用itertools.chain()来压扁它。 但有时候我觉得我宁愿把它写成理解。 我只是不知道该怎么做。 这是一个很有说服力的案例: 假设我想按顺序交换每一对的元素。 我在这里使用一个string作为序列: >>> from itertools import chain >>> seq = '012345' >>> swapped_pairs = zip(seq[1::2], seq[::2]) >>> swapped_pairs [('1', '0'), ('3', '2'), ('5', '4')] >>> "".join(chain(*swapped_pairs)) '103254' 我在序列的偶数和奇数片上使用zip来交换对。 但是,我最终得到了一个现在需要变平的元组列表。 所以我使用链()。 有没有一种方法可以用理解来expression呢? 如果你想把自己的解决scheme发布到交换对的元素这个基本问题上,那么我会投票给我一些新的教训。 但是,我只会将接受的答案标记为针对我的问题,即使答案是“不,你不能”。

从csv文件创build一个字典?

我正在尝试从csv文件创build一个字典。 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) 当我运行上面的代码,我得到一个ValueError: too many values to unpack (expected 2) 。 如何从csv文件创build一个字典? 谢谢。