gpt4 book ai didi

python - Python 中的 "Slice lists"和 "the ellipsis";切片列表和带有切片列表的列表列表

转载 作者:行者123 更新时间:2023-11-28 19:36:19 24 4
gpt4 key购买 nike

原问题:有人能告诉我如何使用“切片列表”和“省略号”吗?它们什么时候有用?谢谢。

这是语言定义中关于“slice_list”和“ellipsis”的内容; Alex Martelli 的回答指出了它们的来源,这不是我预想的。

[ http://docs.python.org/reference/expressions.html#tok-slicing][1]

5.3.3. Slicings

extended_slicing ::= primary "[" slice_list "]"

slice_list ::= slice_item ("," slice_item)* [","]

slice_item ::= expression | proper_slice | ellipsis

ellipsis ::= "..."

[1]: http://docs.python.org/reference/expressions.html#tok-slicing

万一有人(像我一样)正在寻找使用切片列表攻击列表(或列表列表)的方法,这里有 5 种方法可以从列表中获取元素列表,这些元素由切片列表和对列表列表执行相同操作的 2 种方法,在这种情况下,每个列表应用一个切片。输出在最后的评论中。我发现 h5,使用嵌套 for 循环的例子,如果没有使用有意义的变量名(更新)最难理解。

#!/usr/bin/env python



import itertools

puz = [(i + 100) for i in range(40)]
puz1 = list( puz)
puz2 = [(i + 200) for i in range(40)]
puz3 = [(i + 300) for i in range(40)]
puzs = [puz1,puz2,puz3]

sa = slice( 0,1,1)
sb = slice( 30,39,4)
sc = slice( -1, -15,-5)
ss = [sa,sb,sc]

def mapfunc( a,b):
return a[b]

f = map( mapfunc,[puz] * len(ss),ss)
print "f = ", f #same as g below

g = [ puz[i]
for i in ss ]
print "g = ",g #same as f, above

h1 = [ i
for i in itertools.chain( puz[sa],puz[sb],puz[sc]) ]
print "h1 = ", h1 #right

h2 = [ i
for i in itertools.chain( *(map( mapfunc,[puz] * len(ss),ss))) ]
print "h2 = ",h2 #right

h3 = [ i
for i in itertools.chain( *f) ]
print "h3 = ",h3 #right

h4 = [ i
for i in itertools.chain( *g) ]
print "h4 = ", h4 #also right

h5 = []
for slice_object in ss:
for list_element in puz[slice_object]:
h5.append( list_element)
print "h5 = ", h5 #right, too

print "=============================="

hh1 = [ i
for i in itertools.chain( *(map( mapfunc,puzs,ss))) ]
print "hh1 = ",hh1 #right

puz_s_pairs = zip( puzs,ss)
#print "puz_s_pairs = ",puz_s_pairs
hh2 = [ i
for i in itertools.chain( *(map( mapfunc,*zip( *puz_s_pairs)))) ]
print "hh2 = ",hh2 #right

'''
>>> execfile(r'D:/cygwin/home/usr01/wrk/py/pyexpts/list_of_slices_of_list.02.py')
f = [[100], [130, 134, 138], [139, 134, 129]]
g = [[100], [130, 134, 138], [139, 134, 129]]
h1 = [100, 130, 134, 138, 139, 134, 129]
h2 = [100, 130, 134, 138, 139, 134, 129]
h3 = [100, 130, 134, 138, 139, 134, 129]
h4 = [100, 130, 134, 138, 139, 134, 129]
h5 = [100, 130, 134, 138, 139, 134, 129]
==============================
hh1 = [100, 230, 234, 238, 339, 334, 329]
hh2 = [100, 230, 234, 238, 339, 334, 329]
'''

最佳答案

切片列表和省略号最初是在 Python 中引入的,目的是为 numpy(优秀的旧数字)的前身提供良好的语法糖。如果您正在使用 numpy(没有理由回到它的任何前辈!-),您当然应该使用它们;如果出于某种奇怪的原因你正在自己实现超灵活的多维数组,你肯定会想研究 numpy 使用它们的方式并可能会模仿它(它非常好毕竟设计)。除了多维数组,我想不出什么好的用途。

关于python - Python 中的 "Slice lists"和 "the ellipsis";切片列表和带有切片列表的列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1698753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com