相关疑难解决方法(0)

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

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

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

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

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

python split list chunks

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

为什么Python3中没有xrange函数?

最近我开始使用Python3,它缺乏xrange的伤害.

简单的例子:

1) Python2:

from time import time as t
def count():
  st = t()
  [x for x in xrange(10000000) if x%4 == 0]
  et = t()
  print et-st
count()
Run Code Online (Sandbox Code Playgroud)

2) Python3:

from time import time as t

def xrange(x):

    return iter(range(x))

def count():
    st = t()
    [x for x in xrange(10000000) if x%4 == 0]
    et = t()
    print (et-st)
count()
Run Code Online (Sandbox Code Playgroud)

结果分别是:

1) 1.53888392448 2) 3.215819835662842

这是为什么?我的意思是,为什么xrange被删除了?这是一个很好的学习工具.对于初学者,就像我一样,就像我们所有人一样.为什么删除它?有人能指出我正确的PEP,我找不到它.

干杯.

python xrange pep python-3.x

259
推荐指数
3
解决办法
32万
查看次数

在Python FOR循环中获取循环计数

for循环遍历列表的Python 循环中,我们可以编写:

for item in list:
    print item
Run Code Online (Sandbox Code Playgroud)

它整齐地遍历列表中的所有元素.有没有办法在循环中知道到目前为止我循环了多少次?例如,我想要一个列表,在我处理了十个元素后,我想用它们做一些事情.

我想到的替代方案将是这样的:

count=0
for item in list:
    print item
    count +=1
    if count % 10 == 0:
        print 'did ten'
Run Code Online (Sandbox Code Playgroud)

要么:

for count in range(0,len(list)):
    print list[count]
    if count % 10 == 0:
        print 'did ten'
Run Code Online (Sandbox Code Playgroud)

到目前为止,是否有更好的方法(就像for item in list)获得迭代次数?

python for-loop

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

如何通过两个循环列表?

可能重复:
以块的形式迭代列表的最"pythonic"方法是什么?

我想循环遍历Python列表并一次处理2个列表项.用另一种语言这样的东西:

for(int i = 0; i < list.length(); i+=2)
{
   // do something with list[i] and list[i + 1]
}
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

python iteration loops for-loop list

231
推荐指数
5
解决办法
39万
查看次数

在Python中用块(n)迭代迭代器?

你能想出一个很好的方法(可能用itertools)将迭代器拆分成给定大小的块吗?

因此l=[1,2,3,4,5,6,7]chunks(l,3)变成一个迭代[1,2,3], [4,5,6], [7]

我可以想到一个小程序来做这个,但不是一个很好的方式可能itertools.

python iterator

102
推荐指数
6
解决办法
5万
查看次数

单列表中的对

通常情况下,我发现需要成对处理列表.我想知道哪个是pythonic和有效的方法,并在谷歌上找到了这个:

pairs = zip(t[::2], t[1::2])
Run Code Online (Sandbox Code Playgroud)

我认为这是pythonic足够的,但在最近讨论成语与效率之后,我决定做一些测试:

import time
from itertools import islice, izip

def pairs_1(t):
    return zip(t[::2], t[1::2]) 

def pairs_2(t):
    return izip(t[::2], t[1::2]) 

def pairs_3(t):
    return izip(islice(t,None,None,2), islice(t,1,None,2))

A = range(10000)
B = xrange(len(A))

def pairs_4(t):
    # ignore value of t!
    t = B
    return izip(islice(t,None,None,2), islice(t,1,None,2))

for f in pairs_1, pairs_2, pairs_3, pairs_4:
    # time the pairing
    s = time.time()
    for i in range(1000):
        p = f(A)
    t1 = time.time() - s

    # time using the pairs …
Run Code Online (Sandbox Code Playgroud)

python zip idioms list slice

87
推荐指数
3
解决办法
5万
查看次数

加入列表中的元素对 - Python

我知道列表可以连接成一个长字符串,如:

x = ['a', 'b', 'c', 'd']
print ''.join(x)
Run Code Online (Sandbox Code Playgroud)

显然这会输出:

'abcd'
Run Code Online (Sandbox Code Playgroud)

但是,我想要做的只是加入列表中的第一个和第二个字符串,然后加入第三个和第四个,依此类推.简而言之,从上面的例子中取而代之的是输出:

['ab', 'cd']
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法来做到这一点?我还应该提到列表中字符串的长度是不可预测的,列表中的字符串数也是如此,尽管字符串的数量总是均匀的.所以原始列表也可以是:

['abcd', 'e', 'fg', 'hijklmn', 'opq', 'r'] 
Run Code Online (Sandbox Code Playgroud)

python string join list

81
推荐指数
3
解决办法
17万
查看次数

如何使用python一次从文件中读取两行

我正在编写一个解析文本文件的python脚本.这个文本文件的格式是这样的,文件中的每个元素都使用两行,为方便起见,我想在解析之前读取这两行.这可以用Python完成吗?

我想要一些像:

f = open(filename, "r")
for line in f:
    line1 = line
    line2 = f.readline()

f.close
Run Code Online (Sandbox Code Playgroud)

但这打破说:

ValueError:混合迭代和读取方法会丢失数据

有关:

python

74
推荐指数
6
解决办法
5万
查看次数

为什么子串切片索引超出范围在Python中有效?

为什么不'example'[999:9999]导致错误?既然'example'[9]做,什么是其背后的动机是什么?

从这种行为我可以假设'example'[3],基本上/内部,不一样'example'[3:4],即使两者都产生相同的'm'字符串.

python string substring

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

将列表拆分为n组的替代方法

假设我有一个任意长度的列表,L:

L = list(range(1000))
Run Code Online (Sandbox Code Playgroud)

将该列表拆分成组的最佳方法是n什么?这是我能够提出的最好的结构,并且由于某种原因,它不觉得它是完成任务的最佳方式:

n = 25
for i in range(0, len(L), n):
    chunk = L[i:i+25]
Run Code Online (Sandbox Code Playgroud)

是否有内置功能,我缺少这个?

编辑:早期的答案是将我的for循环重新编写为listcomp,这不是主意; 你基本上以不同的形式给我我的确切答案.我正在看是否有另一种方法可以实现这一点,就像.split列表上的假设一样.我也在昨晚写的一些代码中使用它作为生成器:

def split_list(L, n):
    assert type(L) is list, "L is not a list"
    for i in range(0, len(L), n):
        yield L[i:i+n]
Run Code Online (Sandbox Code Playgroud)

python

54
推荐指数
5
解决办法
5万
查看次数

标签 统计

python ×10

list ×4

for-loop ×2

string ×2

chunks ×1

idioms ×1

iteration ×1

iterator ×1

join ×1

loops ×1

pep ×1

python-3.x ×1

slice ×1

split ×1

substring ×1

xrange ×1

zip ×1