我有一个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)
但是,仍然没有"感觉"正确.: - /
我试图像这样导入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)
但我没有运气.仍然会遇到错误.
我正在开展一个深度学习项目,我们使用RNN.我想在数据馈送到网络之前对数据进行编码.输入是阿拉伯语经文,其变音符号在Python中被视为单独的字符.如果跟随它的字符是变音符号,我应编码/表示带有数字的字符,否则我只编码字符.
这样做对数以百万计的诗句,希望能使用lambda与map.但是,我不能一次迭代两个字符,即希望:
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 INT至63A HEX - 1594 INT和641 HEX - 1601 INT至64A HEX - …
给出一个清单
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 ×4
python-3.x ×2
chunks ×1
iteration ×1
izip ×1
lambda ×1
list ×1
loops ×1
optimization ×1
python-2.7 ×1