我有一个任意长度的列表,我需要将它分成相同大小的块并对其进行操作.有一些明显的方法可以做到这一点,比如保留一个计数器和两个列表,当第二个列表填满时,将它添加到第一个列表并清空下一轮数据的第二个列表,但这可能非常昂贵.
我想知道是否有人对任何长度的列表都有一个很好的解决方案,例如使用生成器.
我一直在寻找有用的东西,itertools但我找不到任何明显有用的东西.但是可能会错过它.
如何进行for循环或列表理解,以便每次迭代都给出两个元素?
l = [1,2,3,4,5,6]
for i,k in ???:
print str(i), '+', str(k), '=', str(i+k)
Run Code Online (Sandbox Code Playgroud)
输出:
1+2=3
3+4=7
5+6=11
Run Code Online (Sandbox Code Playgroud) 我有一套像(669256.02,6117662.09,669258.61,6117664.39,669258.05,6117665.08),我需要迭代,像
for x,y in (669256.02, 6117662.09, 669258.61, 6117664.39, 669258.05, 6117665.08)
print (x,y)
Run Code Online (Sandbox Code Playgroud)
哪个会打印
669256.02 6117662.09
669258.61 6117664.39
669258.05 6117665.08
Run Code Online (Sandbox Code Playgroud)
我在Python 3.3顺便说一句
我有一个包含数千行的生成文件,如下所示:
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中使用标准模块进行此操作?
a = [3,5,8,3,9,5,0,3,2,7,5,4]
for o in a[::3]:
print o
Run Code Online (Sandbox Code Playgroud)
这让我得到了第一个和每3个项目.3,3,0,7
有没有办法可以检索下两个项目?
a = [3,5,8,3,9,5,0,3,2,7,5,4]
for o in a[::3]:
if o == 0:
print o
print o + 1
print o + 2
Run Code Online (Sandbox Code Playgroud)
输出0 3 2
我知道这不正确,但也许你可以看到我想要做的事情.基本上,我有一长串属性,每个属性有三个部分,parent_id,property_type和property_value,我需要从列表中检索属性的所有三个部分.
我已经看了几个问题迭代列表中的每两个元素和 Python"Every Other Element"成语,他们已经得到了一个答案,我可能会被迫使用,但我觉得有一个更好的方法; 我想用下面的代码做的是能够打印每两个或每4个元素
Gun_rack =(
'Gun 1:', 'Colt New Frontier 44 Special', 'Cal:.44 ', 'Weight: 2.8 lbs', 'Ammo Capacity :6',
'Gun 2:', 'Smith & Wesson SW1911DK' , 'Cal:.45 ACP ', 'Weight: 2.6 lbs', 'Ammo Capacity :9',
'Gun 3:', 'Heckler & Koch P2000SK V2', 'Cal.357 ', 'Weight: 1.50 lbs', 'Ammo Capacity :13',
'Gun 4:', 'Magnum Research Desert Eagle', 'Cal.50 ', 'Weight: 4.46 lbs', 'Ammo Capacity :7',
'Gun 5:', 'Heckler & Koch MP5K ', 'Cal 9mm ', …Run Code Online (Sandbox Code Playgroud) c = [1,2,3,4,5,6,7,8,9,10]
for a,b in func(c):
doSomething()
Run Code Online (Sandbox Code Playgroud)
所以func()必须返回 (1,2) (2,3) (3,4) ... (8,9) (9,10)
在python 2.7中是否有一个优雅的方法来实现这一目标?
python ×7
list ×5
chunks ×1
dictionary ×1
iteration ×1
parsing ×1
python-2.7 ×1
split ×1
tuples ×1