Tag: list comprehension

在Python中,使用列表parsing还是for-each循环更好?

以下哪个更好用,为什么? 方法1: for k, v in os.environ.items(): print "%s=%s" % (k, v) 方法2: print "\n".join(["%s=%s" % (k, v) for k,v in os.environ.items()]) 我倾向于把第一个理解为更容易理解,但这可能只是因为我是Python新手,列表理解对我来说还是有些陌生的。 第二种方式认为是更多Pythonic? 我假设没有性能差异,但我可能是错的。 这两种技术的优点和缺点是什么? (代码取自潜入Python )

如果只有一个结果,可以select列表理解

我开始习惯于在Python中列出理解,但恐怕我有点不正确的使用它。 我遇到了几次使用列表理解的场景,但立即从生成的列表中获取第一个(也是唯一的)项目。 这里是一个例子: actor = [actor for actor in self.actors if actor.name==actorName][0] (self.actors包含一个对象的列表,我试图find一个特定的(string)名称,这是在actorName。) 我试图从列表中提取匹配我正在寻找的参数的对象。 这种方法不合理吗? 悬空[0]让我觉得有点不安全。

列表理解:为什么这是一个语法错误?

为什么print(x)在下面的列表理解中无效( SyntaxError )? my_list=[1,2,3] [print(my_item) for my_item in my_list] 为了对比 – 以下不会给出语法错误: def my_func(x): print(x) [my_func(my_item) for my_item in my_list]

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(); 可以使用列表理解翻译成python如下。 words = ["hello", "wonderful", "linq", "beautiful", "world"] shortWords = [x for x in words if len(x) <=5] print shortWords […]

Python列表理解访问索引/枚举可能吗?

考虑下面的Python代码,我将它添加到一个新的list2列表1的索引从1到3的所有项目: for ind, obj in enumerate(list1): if 4> ind > 0: list2.append(obj) 如果我没有通过枚举访问索引,你将如何使用python list comprehension编写这个? 就像是: list2 = [x for x in list1 if 4>ind>0] 但由于我没有“印度”号码,这是否会工作? : list2 = [x for x in enumerate(list1) if 4>ind>0]

Java中类Python的列表理解

由于Java不允许传递方法作为参数,你使用什么技巧来实现像Java中的列表理解一样的Python? 我有一个列表(ArrayList)的string。 我需要通过使用函数来转换每个元素,以便我得到另一个列表。 我有几个函数将一个string作为input,并返回另一个string作为输出。 我如何做一个generics的方法,可以给列表和函数作为参数,以便我可以得到每个处理元素的列表。 在字面意义上是不可能的,但是我应该使用什么技巧? 另一个select是为每个较小的string处理函数编写一个新的函数,它只是在整个列表上循环,这不是很酷。

Python列表理解 – 希望避免重复评估

我有一个列表理解近似于: [f(x) for x in l if f(x)] 其中l是一个列表,f(x)是一个返回列表的昂贵函数。 我想避免f(x)每f(x)的非空发生两次评估。 有什么方法可以将其输出保存在列表理解中? 我可以删除最后的条件,生成整个列表,然后修剪它,但这似乎是浪费。 编辑 : 已经提出了两种基本方法: 内在的发电机理解: [y for y in (f(x) for x in l) if y] 或记忆。 我认为内在的生成器理解对于所述的问题是优雅的。 其实我简化了这个问题来说清楚,我真的很想: [g(x, f(x)) for x in l if f(x)] 对于这种更复杂的情况,我认为备忘录产生了一个更清洁的最终结果。

打破清单理解

我怎样才能打破基于条件的列表理解,例如,当find412号? 码: numbers = [951, 402, 984, 651, 360, 69, 408, 319, 601, 485, 980, 507, 725, 547, 544, 615, 83, 165, 141, 501, 263, 617, 865, 575, 219, 390, 984, 592, 236, 105, 942, 941, 386, 462, 47, 418, 907, 344, 236, 375, 823, 566, 597, 978, 328, 615, 953, 345, 399, 162, 758, […]

如何跳过Pythondebugging器(pdb)中的列表理解?

在pdb , next条指令不会超越列表parsing,而是逐步执行每个迭代。 有没有一种方法可以让它们在列表理解之后的下一行继续debugging呢? 我不得不求助于列出代码,在下一行设置一个断点,然后继续执行到下一个断点。 这是烦人的,我觉得必须有更好的方法。

python列表parsing; 压缩列表的列表?

家伙。 我试图find一个问题的最优雅的解决scheme,并想知道是否有什么内置的python我试图做的。 我正在做的是这个。 我有一个列表A ,我有一个函数f ,它接受一个项目并返回一个列表。 我可以使用列表理解来转换A所有内容。 [f(a) for a in A] 但是这会返回一个列表清单; [a1,a2,a3] => [[b11,b12],[b21,b22],[b31,b32]] 我真正想要的是得到扁平化的名单; [b11,b12,b21,b22,b31,b32] 现在,其他语言有它, 传统上称为函数式编程语言中的flatmap ,而.Net将其称为SelectMany 。 python有类似的东西吗? 有没有一个整洁的方式来映射一个函数的列表,并平坦的结果? 我试图解决的实际问题是这样的; 从目录列表开始,find所有的子目录。 所以; import os dirs = ["c:\\usr", "c:\\temp"] subs = [os.listdir(d) for d in dirs] print subs currentliy给了我一个清单,但我真的想要一个清单。