我想知道是否有一条快捷方式可以在Python列表中列出一个简单的列表.
我可以在for循环中做到这一点,但也许有一些很酷的"单行"?我用reduce尝试了,但是我收到了一个错误.
码
l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
reduce(lambda x, y: x.extend(y), l)
Run Code Online (Sandbox Code Playgroud)
错误信息
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
AttributeError: 'NoneType' object has no attribute 'extend'
Run Code Online (Sandbox Code Playgroud) 是否有一种简单的方法可以使用列表推导来展平迭代列表,或者失败,你会认为什么是平衡这样的浅层列表,平衡性能和可读性的最佳方法?
我尝试使用嵌套列表理解来压缩这样的列表,如下所示:
[image for image in menuitem for menuitem in list_of_menuitems]
Run Code Online (Sandbox Code Playgroud)
但我在NameError那里遇到麻烦,因为name 'menuitem' is not defined.谷歌搜索并浏览Stack Overflow后,我得到了一个reduce声明所需的结果:
reduce(list.__add__, map(lambda x: list(x), list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)
但是这个方法相当难以理解,因为我需要那个list(x)调用,因为x是一个Django QuerySet对象.
结论:
感谢所有为此问题做出贡献的人.以下是我学到的内容摘要.我也将其作为社区维基,以防其他人想要添加或更正这些观察结果.
我原来的reduce语句是多余的,用这种方式编写得更好:
>>> reduce(list.__add__, (list(mi) for mi in list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)
这是嵌套列表理解的正确语法(Brilliant summary dF!):
>>> [image for mi in list_of_menuitems for image in mi]
Run Code Online (Sandbox Code Playgroud)
但这些方法都不如使用效率高itertools.chain:
>>> from itertools import chain
>>> list(chain(*list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)
正如@cdleary指出的那样,通过使用chain.from_iterable如下所示来避免*操作符魔术可能是更好的风格:
>>> chain = itertools.chain.from_iterable([[1,2],[3],[5,89],[],[6]])
>>> print(list(chain))
>>> [1, 2, …Run Code Online (Sandbox Code Playgroud) 我正在使用itertools.chain以这种方式"压扁"列表列表:
uniqueCrossTabs = list(itertools.chain(*uniqueCrossTabs))
Run Code Online (Sandbox Code Playgroud)
这有什么不同于说:
uniqueCrossTabs = list(itertools.chain(uniqueCrossTabs))
Run Code Online (Sandbox Code Playgroud) 假设我们有一个迭代器(一个无限的)返回列表(或有限迭代器),例如返回的一个
infinite = itertools.cycle([[1,2,3]])
Run Code Online (Sandbox Code Playgroud)
什么是一个很好的Python习惯用来获得一个迭代器(显然是无限的),它将从第一个迭代器返回每个元素,然后从第二个迭代器返回每个元素,等等.在上面的例子中它将返回1,2,3,1,2,3,....迭代器是无限的,所以itertools.chain(*infinite)不起作用.
我正在尝试map在Python3中使用.这是我正在使用的一些代码:
import csv
data = [
[1],
[2],
[3]
]
with open("output.csv", "w") as f:
writer = csv.writer(f)
map(writer.writerow, data)
Run Code Online (Sandbox Code Playgroud)
但是,因为map在Python3中返回一个迭代器,这段代码在Python3中不起作用(但在Python2中工作正常,因为该版本map总是返回一个list)
我目前的解决方案是list在迭代器上添加函数调用以强制进行评估.但它似乎很奇怪(我不关心返回值,为什么我应该将迭代器转换为列表?)
更好的解决方案?
I am writing a small script to help out with Japanese kana memorisation. How would I combine the following lists into one? I tried as follows.
a = ["a", "i", "u", "e", "o"]
k = ["ka", "ki", "ku", "ke", "ko"]
g = ["ga", "gi", "gu", "ge", "go"]
s = ["sa", "shi", "su", "se", "so"]
z = ["za", "ji", "zu", "ze", "zo"]
t = ["ta", "chi", "tsu", "te", "to"]
d = ["da", "du", "de", "do"]
n = ["na", "ni", "nu", "ne", …Run Code Online (Sandbox Code Playgroud) 如何计算使用嵌套列表创建的多维数组中某些值的出现次数?在以下列表中寻找'foobar'时:
list = [['foobar', 'a', 'b'], ['x', 'c'], ['y', 'd', 'e', 'foobar'], ['z', 'f']]
Run Code Online (Sandbox Code Playgroud)
它应该回来2.
(是的,我知道我可以编写一个只搜索所有内容的循环,但我不喜欢这个解决方案,因为它相当耗时,(写入和运行时))
.count可能吗?
出现特定字符串时是否可以插入列表。例子:
List=['north','south','east','west','south','united']
Run Code Online (Sandbox Code Playgroud)
因此,每次出现字符串 'south' 时,列表都会在列表中'canada'的元素 south 之前插入一个项目。
Results
List=['north','canada','south','east','west','canada','south','united']
Run Code Online (Sandbox Code Playgroud)
编辑:我很抱歉不够具体。我需要它来寻找特定的字符。
List1=['north','<usa>23<\usa>','east','west','<usa>1942<\usa>','united']
Result=['north','canada', '<usa>23<\usa>','east','west','canada','<usa>1942<\usa>','united']
Run Code Online (Sandbox Code Playgroud) 我有这样的事情:
[e for e in ([n for n in xrange(random.randrange(1, 5))] for x in xrange(10))]
Run Code Online (Sandbox Code Playgroud)
它产生:
[[0, 1, 2, 3], [0, 1, 2], [0], [0], [0, 1], [0], [0, 1], [0, 1, 2, 3], [0, 1, 2], [0, 1, 2]]
Run Code Online (Sandbox Code Playgroud)
而且我需要相同但平整的结构.
现在我使用类似的东西:
l = []
[l.extend(e) for e in ([n for n in xrange(random.randrange(1, 5))] for x in xrange(10))]
Run Code Online (Sandbox Code Playgroud)
但是,在理解中实现任意长度列表的"解包"是否有些不足之处呢?
我知道"".join(list)将列表转换为字符串,但如果该列表包含嵌套列表怎么办?当我尝试它时返回一个TypeError由于意外的列表类型.我猜测错误处理是可能的,但到目前为止,我的尝试都没有结果.
我有一个列表,如['a','b','c','d','e','f','g','h','i','j','k']
如何根据每n项(例如每4项)对其进行重新排序,使其具有第1项,然后是第5项,然后是第9项,然后是第2项,然后是第6项,然后是第10项,那么第3项,第7项和第11项,然后是第4项,第8项和第12项.(是的,我很遗憾开始用1来代替0来写出......)
['a','e','i','b','f','j','c','g','k']
让我们假设我有3个蟒蛇二维表(data_1,data_2,data_310x5尺寸)。我想从中制作一个all_data30x5尺寸的列表()。现在,我通过应用以下操作来做到这一点:
data_1 = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], ..., [46, 47, 48, 49, 50]]
data_2 = [[101, 102, 103, 104, 105], [106, 107, 108, 109, 110], ..., [146, 147, 148, 149, 150]]
data_3 = [[201, 202, 203, 204, 205], [206, 207, 208, 209, 210], ..., [246, 247, 248, 249, 250]]
all_data = []
for index, item in enumerate(data_1):
all_data.append(item)
for index, item in enumerate(data_2):
all_data.append(item)
for index, …Run Code Online (Sandbox Code Playgroud) 我在Python中被称为新手.我对列表有困难.我有一个循环,从文本文件中获取一些信息并通过函数.如果textfiles lenght是10行,则输出将是10个单独的列表,如:[0.45] [0.87] ......依此类推,n + 1次(取决于textfile的长度).
如何将它们放入单个列表中,如[0.45,0.87,...]?我尝试了不同的循环,但没有:(
我以前很感谢:) ..并且对我糟糕的英语不好意思
码:
from pyfann import libfann
import os
path="."
ext = ".net"
files = [file for file in os.listdir(path) if file.lower().endswith(ext)]
for j in files:
ann = libfann.neural_net()
ann.create_from_file(j)
print j
f=open('nsltest1.dat','r')
for i in f:
x=i.strip()
y=[float(i) for i in x.split()]
z=ann.run(y)
print z
Run Code Online (Sandbox Code Playgroud)