相关疑难解决方法(0)

如何将列表拆分为大小均匀的块?

我有一个任意长度的列表,我需要将它分成相同大小的块并对其进行操作.有一些明显的方法可以做到这一点,比如保留一个计数器和两个列表,当第二个列表填满时,将它添加到第一个列表并清空下一轮数据的第二个列表,但这可能非常昂贵.

我想知道是否有人对任何长度的列表都有一个很好的解决方案,例如使用生成器.

我一直在寻找有用的东西,itertools但我找不到任何明显有用的东西.但是可能会错过它.

相关问题:在块中迭代列表的最"pythonic"方法是什么?

python split list chunks

2068
推荐指数
40
解决办法
84万
查看次数

在块中迭代列表的最"pythonic"方法是什么?

我有一个Python脚本,它将整数列表作为输入,我需要一次使用四个整数.不幸的是,我无法控制输入,或者我将它作为四元素元组列表传入.目前,我正在以这种方式迭代它:

for i in xrange(0, len(ints), 4):
    # dummy op for example code
    foo += ints[i] * ints[i + 1] + ints[i + 2] * ints[i + 3]
Run Code Online (Sandbox Code Playgroud)

它看起来很像"C-think",这让我怀疑有更多的pythonic方式来处理这种情况.迭代后会丢弃该列表,因此无需保留.也许这样的事情会更好吗?

while ints:
    foo += ints[0] * ints[1] + ints[2] * ints[3]
    ints[0:4] = []
Run Code Online (Sandbox Code Playgroud)

但是,仍然没有"感觉"正确.: - /

相关问题:如何在Python中将列表拆分为大小均匀的块?

python optimization loops list chunks

449
推荐指数
15
解决办法
12万
查看次数

迭代器,迭代和迭代究竟是什么?

Python中"iterable","iterator"和"iteration"的最基本定义是什么?

我已阅读多个定义,但我无法确定其确切含义,因为它仍然不会沉入其中.

有人可以帮助我解释外行人的3个定义吗?

python iteration iterator iterable terminology

408
推荐指数
10
解决办法
29万
查看次数

Python生成器,将另一个可迭代组合成N组

我正在寻找一个可迭代i和大小的函数,n并产生长度n为连续值的元组i:

x = [1,2,3,4,5,6,7,8,9,0]
[z for z in TheFunc(x,3)]
Run Code Online (Sandbox Code Playgroud)

[(1,2,3),(4,5,6),(7,8,9),(0)]
Run Code Online (Sandbox Code Playgroud)

标准库中是否存在这样的功能?

如果它作为标准库的一部分存在,我似乎无法找到它并且我已经没有用于搜索的术语.我可以自己写,但我宁愿不写.

python generator std

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

使用在python中调用外部命令来控制子进程的数量

我理解使用subprocess是调用外部命令的首选方式.

但是如果我想在parall中运行几个命令,但是限制生成的进程数呢?困扰我的是我无法阻止子进程.例如,如果我打电话

subprocess.Popen(cmd, stderr=outputfile, stdout=outputfile)
Run Code Online (Sandbox Code Playgroud)

然后该过程将继续,无需等待cmd完成.因此,我无法将其包装在multiprocessing图书馆的工作人员中.

例如,如果我这样做:

def worker(cmd): 
    subprocess.Popen(cmd, stderr=outputfile, stdout=outputfile);

pool = Pool( processes = 10 );
results =[pool.apply_async(worker, [cmd]) for cmd in cmd_list];
ans = [res.get() for res in results];
Run Code Online (Sandbox Code Playgroud)

然后每个工人将在产生子流程后完成并返回.所以我无法真正限制subprocess使用生成的进程数Pool.

什么是限制子过程数量的正确方法?

python parallel-processing subprocess multiprocessing

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

Python 3生成器理解生成包括last的块

如果您在Python 3.7中有一个列表:

>>> li
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)

您可以n使用两种常见的Python习语之一将其转换为每个长度的块列表:

>>> n=3
>>> list(zip(*[iter(li)]*n))
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
Run Code Online (Sandbox Code Playgroud)

因为(9,10)不是长度,所以丢弃最后一个不完整的元组n

你也可以这样做:

>>> [li[i:i+n] for i in range(0,len(li),n)]
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10]]
Run Code Online (Sandbox Code Playgroud)

如果你想要最后一个子列表,即使它有少于n元素.

假设我现在有一个发电机,gen未知长度或终端(所以呼叫list(gen))sum(1 for _ in gen)不明智)我想要每个块.

我能够想出的最好的生成器表达式是这样的:

from itertools import zip_longest
sentinel=object()             # for use in filtering out ending …
Run Code Online (Sandbox Code Playgroud)

python generator python-3.x

11
推荐指数
1
解决办法
359
查看次数

从Python列表中获取n个项目组的惯用方法?

给出一个清单

A = [1 2 3 4 5 6]
Run Code Online (Sandbox Code Playgroud)

是否有任何惯用(Pythonic)方式迭代它就好像它一样

B = [(1, 2) (3, 4) (5, 6)]
Run Code Online (Sandbox Code Playgroud)

索引除外?感觉就像C的延续:

for a1,a2 in [ (A[i], A[i+1]) for i in range(0, len(A), 2) ]:
Run Code Online (Sandbox Code Playgroud)

我不禁觉得应该有一些聪明的黑客使用itertools或切片或其他东西.

(当然,一次两个只是一个例子;我想要一个适用于任何n的解决方案.)

编辑:在Python中一次迭代字符串2(或n)个字符,但即使是最干净的解决方案(使用zip接受)也不能很好地推广到更高的n而没有列表理解和*-notation.

python iteration

9
推荐指数
1
解决办法
4447
查看次数

迭代列表一次获取三个项目

如果我有一个清单:

["A","Bb","C","D","E","F","G"]
Run Code Online (Sandbox Code Playgroud)

我如何迭代它以便输出以下内容:

"A Bb C"
"D E F"
"G"
Run Code Online (Sandbox Code Playgroud)

python

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

如何比较同一列表中的两个相邻项 - Python

我正在寻找一种比较列表中两个相邻项目的方法,例如.比较哪个值更高,然后我会相应地对它们进行排序.这是一个用户将要输入的列表,所以它不是公正的情况 if l[1] > l[2],因为我不知道列表的长度,所以我需要一个通用语句用于for循环.

我有想法有类似 for i in l: if x > i[index of x + 1] 但不知道如何找到变量的索引.感谢任何帮助,谢谢

编辑:我知道内置的排序功能,但只是想通过创建自己的:)来练习编码和算法编写

python list python-2.7

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

许多词典使用大量的RAM

我有一个非常简单的Python脚本来创建(用于测试目的),列表中有3500万个字典对象.每个字典对象包含两个键/值对.例如.

{'Name': 'Jordan', 'Age': 35}
Run Code Online (Sandbox Code Playgroud)

该脚本非常简单地对名称和年龄进行查询,搜索字典列表并返回包含所有匹配字典条目索引的新列表.

但是,如下所示,消耗了大量内存.我认为我在某个地方犯了一个非常天真的错误.

代码和任务管理器的屏幕截图显示ram使用情况

我的代码如下:(如果更具可读性,也可以在图像中查看).

import sys

# Firstly, we will create 35 million records in memory, all will be the same apart from one

def search(key, value, data, age):
    print("Searching, please wait")
    # Create list to store returned PKs
    foundPKS = []
    for index in range(0, len(data)):
        if key in data[index] and 'Age' in data[index]:
            if data[index][key] == value and data[index]['Age'] >= age:
                foundPKS.append(index)
    results = foundPKS
    return results

def createdata():
    # Let's create …
Run Code Online (Sandbox Code Playgroud)

python memory optimization dictionary python-3.x

4
推荐指数
1
解决办法
187
查看次数

在Python中只打印一定数量的字符

可能重复:
在Python中用块(n)迭代迭代器?

假设我有一个492个字符的字符串存储在一个变量中.如何打印前50个字符,然后转到下一行,然后打印出下一个50,最后打印一个包含42个字符的行?

python string

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