Python中如何实现数据切片?请教一个数据切片的问题
有一组数据 Values,用 print(Values)打印出来之后如下:
0 3.911735
1 3.361345
2 0.278293
3 5.546312
4 0.707214
5 1.253616
6 0.064558
7 6.365298
8 -0.916926
9 -4.859611
10 -3.333333
11 0.211060
12 4.772938
13 0.749465
14 -0.089087
15 1.250000
16 1.305221
17 -1.395007
18 0.749064
19 1.684717
20 -4.233129
21 2.536232
22 -1.563722
23 -2.775897
24 1.498258
25 10.022779
26 -2.649770
27 -1.598245
28 1.211689
29 -1.456311
63660 -4.156250
63661 -4.642857
63662 -7.877170
63663 -8.370044
63664 -9.767892
63665 -9.950556
63666 -3.908795
63667 -8.882521
63668 -10.010267
63669 -5.669145
63670 -4.437870
63671 -8.365608
63672 -9.408451
63673 -8.650261
63674 -9.984520
63675 -10.000000
63676 -9.966777
63677 -9.992811
63678 -7.536042
63679 -9.990109
63680 -9.803922
63681 -9.359417
63682 -5.721393
63683 -10.000000
63684 -10.000000
63685 -10.000000
63686 -9.249431
63687 -9.990010
63688 -9.990182
63689 -10.008220
Name: RealValues, Length: 63690, dtype: float64
我用语句 SegValues = Values[ StartPointer : EndPointer ]把它从中间切片,print( SegValues )之后如下:
47590 0.969163
47591 -1.668653
47592 -3.653846
47593 -0.243902
47594 -1.953819
47595 -3.157895
47596 -2.097902
47597 -2.290076
47598 -0.626566
47599 -2.634731
47600 -1.257862
47601 3.343023
47602 -3.041145
47603 3.345127
47604 -2.320186
47605 -1.582278
47606 3.436989
47607 -1.200155
47608 -2.577873
47609 -1.201201
47610 -0.232558
47611 -0.156250
47612 -1.573034
47613 1.002004
47614 0.967118
47615 2.071563
47616 -2.317050
47617 -2.386451
47618 0.000000
47619 4.012346
56839 5.579710
56840 1.765448
56841 1.512097
56842 3.897008
56843 1.572482
56844 2.096178
56845 10.039761
56846 -1.857143
56847 3.642122
56848 0.117165
56849 -1.220539
56850 2.329193
56851 -3.387978
56852 -1.486989
56853 -0.391389
56854 -4.135079
56855 -0.070721
56856 0.498753
56857 0.299760
56858 -4.719101
56859 -0.433463
56860 -6.330553
56861 -2.140007
56862 -2.255639
56863 -1.506373
56864 -0.995025
56865 -2.418605
56866 -0.079239
56867 0.501672
56868 -0.277778
Name: RealValues, Length: 9279, dtype: float64
问题是我想它的序号 47590-56868 变成从 0 开始,该怎么做?
Python中如何实现数据切片?请教一个数据切片的问题
不成熟的想法:按顺序放入数组取下标
在Python里,切片(Slicing)是处理序列类型(比如列表、字符串、元组)最核心的操作之一,用来获取序列的一部分。它的语法是 sequence[start:stop:step],非常直观。
基本语法解析:
start: 起始索引(包含)。默认为0。stop: 结束索引(不包含)。默认为序列长度。step: 步长,即取元素的间隔。默认为1。可以为负数,表示反向切片。
关键点在于索引规则:
Python的索引从0开始,并且支持负索引(-1表示最后一个元素)。切片时,stop索引指向的元素是取不到的,这是新手最容易混淆的地方,记住“顾头不顾尾”就行。
直接上代码例子,一看就懂:
# 假设我们有一个列表
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 1. 基本切片:获取第2到第5个元素(索引1到4)
print(my_list[1:5]) # 输出: [1, 2, 3, 4]
# 2. 从头开始或到结尾
print(my_list[:3]) # 输出: [0, 1, 2] (前3个)
print(my_list[5:]) # 输出: [5, 6, 7, 8, 9] (从索引5开始到最后)
# 3. 使用负索引
print(my_list[-3:]) # 输出: [7, 8, 9] (最后3个)
print(my_list[2:-2]) # 输出: [2, 3, 4, 5, 6, 7] (从索引2到倒数第2个)
# 4. 带步长的切片
print(my_list[::2]) # 输出: [0, 2, 4, 6, 8] (所有偶数索引位置元素)
print(my_list[1::2]) # 输出: [1, 3, 5, 7, 9] (所有奇数索引位置元素)
# 5. 反转序列
print(my_list[::-1]) # 输出: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] (经典的反转操作)
# 6. 在字符串上的应用完全一样
my_str = "Hello, World!"
print(my_str[7:12]) # 输出: "World"
print(my_str[::-1]) # 输出: "!dlroW ,olleH"
一个重要的特性: 切片操作会返回一个新的序列对象,是原序列的浅拷贝。修改切片不会影响原列表(但如果元素是可变对象,比如嵌套列表,则需注意浅拷贝的问题)。
original = [1, 2, 3, 4, 5]
sliced = original[1:4] # [2, 3, 4]
sliced[0] = 99
print(original) # 输出: [1, 2, 3, 4, 5] (原列表没变)
print(sliced) # 输出: [99, 3, 4]
总结建议: 记住 [start:stop:step] 这个模板和“顾头不顾尾”的原则,多练几次就熟了。
你这是什么语言?还是某个框架里面的东西?
如果语法不支持这样的功能,那就只有自己实现一个了…
good question
谢谢 lance6716,OK !
lance6716 真是高人呀,竟能看出来是 pandas 数据。实际上我不知道这是什么结构的数据,只是用 pandas 读取了 CSV 文件,然后又提取了其中的一列,就搞不清楚是什么数据了,以为是一个一维的数组。

