标签: slice

使用切片表示法反转列表

在以下示例中:

foo = ['red', 'white', 'blue', 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

其中:foo[0:6:1]将打印foo中的所有元素.但是,foo[6:0:-1]将省略第1或第0个元素.

>>> foo[6:0:-1]
[3, 2, 1, 'blue', 'white']
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用foo.reverse()或foo [:: - 1]反向打印列表,但我试图理解为什么foo [6:0:-1]不打印整个列表?

python syntax list slice

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

Python切片列表中的第一个和最后一个元素

有没有办法只切片列表中的第一个和最后一个项目?

例如; 如果这是我的清单:

>>> some_list
['1', 'B', '3', 'D', '5', 'F']
Run Code Online (Sandbox Code Playgroud)

这样做(显然[0,-1]是无效的语法):

>>> first_item, last_item = some_list[0,-1]
>>> print first_item
'1'
>>> print last_item
'F'
Run Code Online (Sandbox Code Playgroud)

我试过的一些事情:

In [3]: some_list[::-1]
Out[3]: ['F', '5', 'D', '3', 'B', '1']

In [4]: some_list[-1:1:-1]
Out[4]: ['F', '5', 'D', '3']

In [5]: some_list[0:-1:-1]
Out[5]: []
...
Run Code Online (Sandbox Code Playgroud)

python list slice subscript

60
推荐指数
9
解决办法
13万
查看次数

Go:附加,如果唯一

有没有办法检查切片/贴图是否存在值?

我想在切片中存在切片时才向切片添加值.

这有效,但似乎很冗长.有没有更好的方法来做到这一点?

orgSlice := []int{1, 2, 3}
newSlice := []int{}
newInt := 2

newSlice = append(newSlice, newInt)
for _, v := range orgSlice {
    if v != newInt {
        newSlice = append(newSlice, v)
    }
}

newSlice == [2 1 3]
Run Code Online (Sandbox Code Playgroud)

append go slice

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

如何在某个字符之前获取字符串的最后一部分?

我试图在某个字符之前打印字符串的最后一部分.

我不太确定是否使用字符串.split()方法或字符串切片或其他东西.

这是一些不起作用的代码,但我认为显示逻辑:

x = 'http://test.com/lalala-134'
print x['-':0] # beginning at the end of the string, return everything before '-'
Run Code Online (Sandbox Code Playgroud)

请注意,末尾的数字会有所不同,因此我无法从字符串末尾设置精确计数.

python string split slice python-2.7

56
推荐指数
2
解决办法
10万
查看次数

如何查询pandas中的MultiIndex索引列值

代码示例:

In [171]: A = np.array([1.1, 1.1, 3.3, 3.3, 5.5, 6.6])

In [172]: B = np.array([111, 222, 222, 333, 333, 777])

In [173]: C = randint(10, 99, 6)

In [174]: df = pd.DataFrame(zip(A, B, C), columns=['A', 'B', 'C'])

In [175]: df.set_index(['A', 'B'], inplace=True)

In [176]: df
Out[176]: 
          C
A   B      
1.1 111  20
    222  31
3.3 222  24
    333  65
5.5 333  22
6.6 777  74 
Run Code Online (Sandbox Code Playgroud)

现在,我想要检索A值:
Q1:在范围[3.3,6.6]中 - 预期返回值:[3.3,5.5,6.6]或[3.3,3.3,5.5,6.6],如果是最后一个,则[3.3,5.5 ]或[3.3,3.3,5.5],如果没有.
Q2:在[2.0,4.0]范围内 - 预期回报值:[3.3]或[3.3,3.3]

对于任何其他MultiIndex维度也是如此,例如B值:
Q3 …

python indexing slice multi-index pandas

56
推荐指数
3
解决办法
8万
查看次数

如何从numpy数组中提取任意一行值?

我有一个包含一些图像数据的numpy数组.我想绘制在图像上绘制的横断面的"轮廓".最简单的情况是平行于图像边缘运行的轮廓,因此如果图像阵列是imdat,则所选点处的轮廓(r,c)简单地imdat[r](水平)或imdat[:,c](垂直).

现在,我要带作为输入两个点(r1,c1)(r2,c2),卧都里面imdat.我想在连接这两点的线上绘制值的轮廓.

沿着这样一条线从numpy数组中获取值的最佳方法是什么?更一般地说,沿路径/多边形?

我之前使用过切片和索引,但是对于连续切片元素不在同一行或列中的情况,我似乎无法找到优雅的解决方案.谢谢你的帮助.

python indexing numpy slice

53
推荐指数
4
解决办法
3万
查看次数

性能:切片结构与结构指针切片

我经常使用切片结构.这是一个这样的结构的例子:

type MyStruct struct {
    val1, val2, val3    int
    text1, text2, text3 string
    list                []SomeType
}
Run Code Online (Sandbox Code Playgroud)

所以我定义我的切片如下:

[]MyStruct
Run Code Online (Sandbox Code Playgroud)

假设我在那里有大约一百万个元素,我正在努力研究切片:

  • 我经常附加新元素.(元素总数未知.)
  • 我时不时地对它进行排序.
  • 我也删除元素(尽管没有添加新元素).
  • 我经常读取元素并传递它们(作为函数参数).
  • 元素本身的内容不会改变.

我的理解是,这导致了很多实际结构的混乱.另一种方法是创建一个指向结构的指针:

[]*MyStruct
Run Code Online (Sandbox Code Playgroud)

现在结构保持原样,我们只处理指针,我认为这些指针占用的空间较小,因此可以使我的操作更快.但是现在我给垃圾收集器做了很多工作.

  • 您是否可以提供何时直接使用结构以及何时使用结构指针的一般指导原则?
  • 我应该担心我离开GC的工作量有多少?
  • 复制结构与复制指针的性能开销是否可忽略不计?
  • 也许一百万元素并不多.当切片变得更大时(但当然仍然适合RAM),所有这些都会如何变化?

performance go slice

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

如何检查空切片?

我正在调用一个函数,如果没有值,则返回一个空数组.

当我这样做时,它不起作用:

if r == [] {
    fmt.Println("No return value")            
}
Run Code Online (Sandbox Code Playgroud)

我正在使用的工作是:

var a [0]int
if r == a {
    fmt.Println("No return value")            
}
Run Code Online (Sandbox Code Playgroud)

但是声明一个变量只是为了检查返回值似乎并不正确.有什么更好的方法呢?

go slice

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

为什么p [:]设计为在这两种情况下工作不同?

p = [1,2,3]
print(p) # [1, 2, 3]

q=p[:]  # supposed to do a shallow copy
q[0]=11
print(q) #[11, 2, 3] 
print(p) #[1, 2, 3] 
# above confirms that q is not p, and is a distinct copy 

del p[:] # why is this not creating a copy and deleting that copy ?
print(p) # [] 
Run Code Online (Sandbox Code Playgroud)

以上确认p[:]在这两种情况下工作方式不同。是不是

考虑到在以下代码中,我希望直接使用p而不是的副本p

p[0] = 111
p[1:3] = [222, 333]
print(p) # [111, 222, 333]
Run Code Online (Sandbox Code Playgroud)

我觉得

del p[:] 
Run Code Online (Sandbox Code Playgroud)

与一致 …

python slice python-3.x

51
推荐指数
4
解决办法
3791
查看次数

为什么Python 3中的切片仍然是副本而不是视图?

正如我在评论这个答案后才注意到的那样,Python 3中的切片返回了他们正在切片而不是视图的浅层副本.为什么仍然如此?即使撇开观点numpy的的使用,而不是切片的副本,事实证明dict.keys,dict.valuesdict.items在Python 3所有回报的意见,并有走向更大的使用迭代器面向Python 3中的其他许多方面,使它看起来将会有些切片变得相似的运动.itertools确实有一个islice函数可以进行迭代切片,但是它比普通切片更有限,并且不提供沿着dict.keys或者行的视图功能dict.values.

同样,你可以使用赋值给切片来修改原始列表,但切片本身就是副本而不是视图,这是语言的一个矛盾方面,似乎它违反了Python的Zen中所说明的几个原则.

也就是说,你可以做的事实

>>> a = [1, 2, 3, 4, 5]
>>> a[::2] = [0, 0, 0]
>>> a
[0, 2, 0, 4, 0]
Run Code Online (Sandbox Code Playgroud)

但不是

>>> a = [1, 2, 3, 4, 5]
>>> a[::2][0] = 0
>>> a
[0, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

或类似的东西

>>> a = [1, 2, 3, 4, 5]
>>> b = a[::2]
>>> b …
Run Code Online (Sandbox Code Playgroud)

python language-design slice python-3.x

50
推荐指数
2
解决办法
5685
查看次数