相关疑难解决方法(0)

如何从列表列表中制作一个平面列表?

我想知道是否有一条快捷方式可以在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)

python list flatten multidimensional-array

2950
推荐指数
29
解决办法
184万
查看次数

在Python中展平浅层列表

是否有一种简单的方法可以使用列表推导来展平迭代列表,或者失败,你会认为什么是平衡这样的浅层列表,平衡性能和可读性的最佳方法?

我尝试使用嵌套列表理解来压缩这样的列表,如下所示:

[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)

python list-comprehension

382
推荐指数
10
解决办法
17万
查看次数

函数调用中的星号

我正在使用itertools.chain以这种方式"压扁"列表列表:

uniqueCrossTabs = list(itertools.chain(*uniqueCrossTabs))
Run Code Online (Sandbox Code Playgroud)

这有什么不同于说:

uniqueCrossTabs = list(itertools.chain(uniqueCrossTabs))
Run Code Online (Sandbox Code Playgroud)

python operators

105
推荐指数
3
解决办法
4万
查看次数

Python成语链(flatten)无限可迭代的有限迭代?

假设我们有一个迭代器(一个无限的)返回列表(或有限迭代器),例如返回的一个

infinite = itertools.cycle([[1,2,3]])
Run Code Online (Sandbox Code Playgroud)

什么是一个很好的Python习惯用来获得一个迭代器(显然是无限的),它将从第一个迭代器返回每个元素,然后从第二个迭代器返回每个元素,等等.在上面的例子中它将返回1,2,3,1,2,3,....迭代器是无限的,所以itertools.chain(*infinite)不起作用.

有关

python iterator

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

Python3中非地图评估版的地图?

我正在尝试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在迭代器上添加函数调用以强制进行评估.但它似乎很奇怪(我不关心返回值,为什么我应该将迭代器转换为列表?)

更好的解决方案?

python

19
推荐指数
3
解决办法
6831
查看次数

Combining lists into one

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)

python list

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

用于多维数组的python .count(列表列表)

如何计算使用嵌套列表创建的多维数组中某些值的出现次数?在以下列表中寻找'foobar'时:

list = [['foobar', 'a', 'b'], ['x', 'c'], ['y', 'd', 'e', 'foobar'], ['z', 'f']]
Run Code Online (Sandbox Code Playgroud)

它应该回来2.

(是的,我知道我可以编写一个只搜索所有内容的循环,但我不喜欢这个解决方案,因为它相当耗时,(写入和运行时))

.count可能吗?

python

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

在字符串列表中的特定元素之前和之后插入一个元素

出现特定字符串时是否可以插入列表。例子:

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)

python iteration list

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

如何从任意数量的元素列表中获取列表推导中的平面列表?

我有这样的事情:

[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)

但是,在理解中实现任意长度列表的"解包"是否有些不足之处呢?

python

3
推荐指数
1
解决办法
914
查看次数

"".join(list)如果list包含python中的嵌套列表?

我知道"".join(list)将列表转换为字符串,但如果该列表包含嵌套列表怎么办?当我尝试它时返回一个TypeError由于意外的列表类型.我猜测错误处理是可能的,但到目前为止,我的尝试都没有结果.

python

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

如何为每N个项重新排序Python列表

我有一个列表,如['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']

python list-comprehension list

2
推荐指数
1
解决办法
88
查看次数

如何在没有for循环的情况下附加二维python列表?

让我们假设我有3个蟒蛇二维表(data_1data_2data_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 arrays list append

1
推荐指数
2
解决办法
1677
查看次数

在Python中将不同的列表合并在一起

我在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)

python loops list

0
推荐指数
1
解决办法
5441
查看次数