相关疑难解决方法(0)

在块中迭代列表的最"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万
查看次数

izip不能在Python 3.x中工作

我试图像这样导入izip模块:

from itertools import izip
Run Code Online (Sandbox Code Playgroud)

然而,在最近从Python 2.7转换到3之后 - 它似乎不起作用.

我想写一个csv文件:

writer.writerows(izip(variable1,2))
Run Code Online (Sandbox Code Playgroud)

但我没有运气.仍然会遇到错误.

python python-itertools python-2.7 python-3.x izip

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

用他们的变音符号编码阿拉伯字母(如果存在)

我正在开展一个深度学习项目,我们使用RNN.我想在数据馈送到网络之前对数据进行编码.输入是阿拉伯语经文,其变音符号在Python中被视为单独的字符.如果跟随它的字符是变音符号,我应编码/表示带有数字的字符,否则我只编码字符.

这样做对数以百万计的诗句,希望能使用lambdamap.但是,我不能一次迭代两个字符,即希望:

map(lambda ch, next_ch: encode(ch + next_ch) if is_diacritic(next_ch) else encode(ch), verse)
Run Code Online (Sandbox Code Playgroud)

我在这个问题背后的意图是找到实现上述目标的最快方法.对lambda函数没有限制,但for循环答案不是我正在寻找的.

非阿拉伯人的一个接近的例子,假设你想编码以下文字:

 XXA)L_I!I%M<LLL>MMQ*Q
Run Code Online (Sandbox Code Playgroud)

如果它是一个特殊字符,你希望在将字母与后面的字母连接后对其进行编码,否则只需对字母进行编码.

输出:

['X', 'X', 'A)', 'L_', 'I!', 'I%', 'M<', 'L', 'L', 'L>', 'M', 'M', 'Q*', 'Q']
Run Code Online (Sandbox Code Playgroud)

对于阿拉伯人:

诗节示例:

"قفانبكمنذكرىحبيبومنزلبسقطاللوىبينالدخولفحومل"

变音符号是字母上方的小符号(即,,)


[更新]

变音符号范围64B HEX或1611 INT开始,到652 HEX或1618 INT结束.

字母621 HEX - 1569 INT63A HEX - 1594 INT641 HEX - 1601 INT64A HEX - …

python lambda python-3.x

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

从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
查看次数