相关疑难解决方法(0)

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

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

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

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

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

python split list chunks

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

Python列表迭代器行为和下一个(迭代器)

考虑:

>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
Run Code Online (Sandbox Code Playgroud)

因此,正如预期的那样,推进迭代器是通过改变同一个对象来处理的.

在这种情况下,我希望:

a = iter(list(range(10)))
for i in a:
   print(i)
   next(a)
Run Code Online (Sandbox Code Playgroud)

跳过每个第二个元素:调用next应该使迭代器前进一次,然后循环的隐式调用应该再次前进 - 并且第二次调用的结果将被分配给i.

它没有.循环打印列表中的所有项目,而不跳过任何项目.

我的第一个想法是,这可能发生,因为循环调用iter它传递的内容,这可能会给出一个独立的迭代器 - 事实并非像我们所说的那样iter(a) is a.

那么,为什么next在这种情况下似乎没有推进迭代器呢?

python iteration iterator list

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

在Python中将列表迭代为对(当前,下一个)

我有时需要在Python中迭代一个列表,查看"current"元素和"next"元素.到目前为止,我已经完成了以下代码:

for current, next in zip(the_list, the_list[1:]):
    # Do something
Run Code Online (Sandbox Code Playgroud)

这有效并且符合我的预期,但是有更多惯用或有效的方法来做同样的事情吗?

python

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

迭代Python列表中的项目对

可能的重复:
在Python中迭代列表(当前,下一个)
迭代列表中的每两个元素

是否可以在Python中以下列方式迭代列表(将此代码视为伪代码)?

a = [5, 7, 11, 4, 5]
for v, w in a:
    print [v, w]
Run Code Online (Sandbox Code Playgroud)

它应该产生

[5, 7]
[7, 11]
[11, 4]
[4, 5]
Run Code Online (Sandbox Code Playgroud)

python loops list

85
推荐指数
6
解决办法
9万
查看次数

交换列表中元素的更好方法是什么?

我有一堆看起来像这样的列表:

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

我想交换元素如下:

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

列表的大小可能会有所不同,但它们总是包含偶数个元素.

我是Python的新手,我现在这样做:

l =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
final_l = []
for i in range(0, len(l)/2):
    final_l.append(l[2*i+1])
    final_l.append(l[2*i])
Run Code Online (Sandbox Code Playgroud)

我知道这不是真正的Pythonic,并且想要使用更高效的东西.也许列表理解?

python

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

Python"Every Other Element"成语

我觉得我花了很多时间在Python中编写代码,但没有足够的时间创建Pythonic代码.最近我遇到了一个有趣的小问题,我认为可能有一个简单,惯用的解决方案.解释原文,我需要收集列表中的每个连续对.例如,给定列表[1,2,3,4,5,6],我想计算[(1,2),(3,4),(5,6)].

我想出了一个看起来像翻译Java的快速解决方案.重温这个问题,我能做的最好的就是

l = [1,2,3,4,5,6]
[(l[2*x],l[2*x+1]) for x in range(len(l)/2)]
Run Code Online (Sandbox Code Playgroud)

在长度不均匀的情况下,其具有抛弃最后一个数字的副作用.

是否有一种我不知道的惯用方法,或者这是我最好的方法?

python idioms

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

Python内存消耗:dict VS元组列表

关于不同python数据类型的内存消耗有很多问题和讨论.然而,其中很少(如果有的话)来到一个非常具体的场景.当你想在内存中存储很多键值数据时,哪个数据结构更节省内存,dict还是一个元组列表?

一开始我认为dict比元组列表更强大,并且权力必须有一些代价,实际上一个空的dict占用的内存比空列表或元组更多(参见Python结构的内存大小),所以我以为使用[(key1, value1), (key2, value2), ...]会比内存更有效{key1: value1, key2: value2, ...}.

看起来我错了.只需启动以下代码段,然后查看操作系统报告的内存消耗情况.我正在使用Windows XP,以便任务管理器告诉我,一个大字典只吃"40MB Ram和40MB VIRTURAL Ram",但是一个元组列表吃掉了60MB Ram和60MB Virtual ram.

怎么会这样?

from sys import getsizeof as g
raw_input('ready, press ENTER')
i = 1000000
#p = [(x, x) for x in xrange(i)] # Will print 4,348,736 40,348,736
p = dict((x, x) for x in xrange(i)) # Will print 25,165,964 37,165,964
print g(p), g(p) + sum(g(x) for x in p)
raw_input("Check your process's memory consumption now, press ENTER …
Run Code Online (Sandbox Code Playgroud)

python memory dictionary tuples list

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

如何在python中计算数组的导数

我如何计算数组的导数y(比方说),相对于另一个数组,x(比如说) - 来自某个实验的两个数组?例如,y = [1,2,3,4,4,5,6]x = [.1,.2,.5,.6,.7,.8,.9]; 我想要dy/dx!

python python-2.7

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

Python for循环一次访问两个元素

我在字典的值部分添加了一个名称和一个项的属性值:

value+=child.get('name') + '\t' + child.text + '\t' 
Run Code Online (Sandbox Code Playgroud)

每个文本由选项卡分隔.那么当我稍后处理这个值字符串时,我会在选项卡上拆分并有一个for循环来迭代列表.

如何访问for循环中的名称和值.至于每个属性,我想一次性获取名称和值,并将其写入文件.目前列表如下:

[A,B,A,B,A,B,A,B]

并为每个a,b我想写:

'<'代码名称= a'>'b'<'/ tag'>'

python for-loop

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

如何从一行文字创建字典?

我有一个包含数千行的生成文件,如下所示:

CODE,XXX,DATE,20101201,TIME,070400,CONDITION_CODES,LTXT,PRICE,999.0000,QUANTITY,100,TSN,1510000001

某些行具有更多字段而其他行具有更少字段,但所有行都遵循相同的键值对模式,并且每行具有TSN字段.

在对文件进行一些分析时,我写了一个像下面这样的循环来将文件读入字典:

#!/usr/bin/env python

from sys import argv

records = {}
for line in open(argv[1]):
    fields = line.strip().split(',')
    record = dict(zip(fields[::2], fields[1::2]))
    records[record['TSN']] = record

print 'Found %d records in the file.' % len(records)
Run Code Online (Sandbox Code Playgroud)

...这很好,完全符合我的要求(这print只是一个简单的例子).

但是,对我来说它并没有感觉特别"pythonic"和以下行:

dict(zip(fields[::2], fields[1::2]))
Run Code Online (Sandbox Code Playgroud)

这只是感觉"笨重"(它在田野上迭代了多少次?).

是否有更好的方法在Python 2.6中使用标准模块进行此操作?

python parsing dictionary

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