原始问题:有人可以告诉我如何使用“切片列表”和“省略号”?他们什么时候有用?谢谢。Python中的“切片列表”和“省略号”;切片列表和列表与列表切片
下面是关于“slice_list”和“ellipsis”的语言定义所说的内容; Alex Martelli的回答指出了他们的起源,这不是我所设想的。
[http://docs.python.org/reference/expressions.html#tok-slicing][1]
5.3.3。 Slicings
extended_slicing :: =初级 “[” slice_list “]”
slice_list :: = slice_item( “” slice_item)* [ “”]
slice_item: :=表达式| proper_slice |省略号
省略号:: = “...”
[1]: http://docs.python.org/reference/expressions.html#tok-slicing
在任何人的情况下(如我)正在寻找方法来攻击列表(或列表列表)与切片列表,这里有5种方法来获取列表中的元素列表,这些元素列表由片段列表选择,还有两种方法可以对列表列表做同样的事情,每个列表应用一个切片的情况。输出在最后的评论中。我发现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]
'''
啊。因此,我不想把“切片分类”看作是一种用一种紧凑表达式来排列任意多列表的方法。可怜。我几乎有这个用途。 – behindthefall 2009-11-09 02:26:09
对于“列表运行”,请阅读“从单个一维列表中运行”。 – behindthefall 2009-11-09 02:27:03
@behindthefalls,不,运行通常通过itertools.groupby提取 - 没有特殊的语法。你当然可以在你自己的对象中实现这样的语法,但不确定这对大多数人来说都是可读的。 – 2009-11-09 02:42:38