草庐IT

python - 这条 Python 字符串切片语句中的两个冒号的用途是什么?

例如,str="hello"str[1::3]我可以在Python文档的什么地方找到它? 最佳答案 在sequences'description:s[i:j:k]sliceofsfromitojwithstepkThesliceofsfromitojwithstepkisdefinedasthesequenceofitemswithindexx=i+n*ksuchthat0.Inotherwords,theindicesarei,i+k,i+2*k,i+3*kandsoon,stoppingwhenjisreached(butnev

python - 为什么使用切片复制列表[:] faster than using the obvious way?

为什么使用切片浅复制列表比使用内置的list快得多?In[1]:x=range(10)In[2]:timeitx_=x[:]10000000loops,bestof3:83.2nsperloopIn[3]:timeitx_=list(x)10000000loops,bestof3:147nsperloop通常当我看到像这样奇怪的东西时,它们在python3中被修复了——但这种差异仍然存在:In[1]:x=list(range(10))In[2]:timeitx_=x[:]10000000loops,bestof3:100nsperloopIn[3]:timeitx_=list(x)10

python - itertools.islice 与列表切片相比

我一直在尝试应用一种算法,根据特定条件将Python列表缩减为更小的列表。由于原始列表的体积很大,大约有100k个元素,我尝试使用itertools来避免多次内存分配,所以我想出了这个:reducedVec=['F'ifsum(1forxinislice(vec,i,i+ratio)ifx=='F')>ratio/3.0else'T'foriinxrange(0,len(vec),ratio)]当vec有大约100k个元素时,这个执行时间需要几分钟的时间,令人担忧。当我改为尝试时:reducedVec=['F'ifsum(1forxinvec[i:i+ratio]ifx=='F')>r

python - Python 的切片边界和 "stride"之间的神秘交互

我理解给定一个可迭代对象,例如>>>it=[1,2,3,4,5,6,7,8,9]我可以把它变成一个列表,然后在任意点切掉末端,例如>>>it[1:-2][2,3,4,5,6,7]或反转>>>it[::-1][9,8,7,6,5,4,3,2,1]或将两者结合>>>it[1:-2][::-1][7,6,5,4,3,2]但是,尝试在单个操作中完成此操作会产生一些令我困惑的结果:>>>it[1:-2:-1][]>>>>it[-1:2:-1][9,8,7,6,5,4]>>>>it[-2:1:-1][8,7,6,5,4,3]只有经过反复试验,我才能得到我要找的东西:>>>it[-3:0:-1][7

python - 通过引用切片到不可变字符串而不是复制

如果您使用string.split()在Python字符串上,它返回一个字符串列表。这些被拆分出来的子字符串是父字符串的一部分的副本。是否有可能获得一些更便宜的slice对象,它只包含对拆分出的位的引用、偏移量和长度?是否有可能有一些“字符串View”来提取和处理这些子字符串,就好像它们是字符串一样,而不复制它们的字节?(我问,因为我有非常大的字符串,我想切片并且偶尔会用完内存;删除副本将是一个廉价的配置文件引导的胜利。) 最佳答案 buffer将为您提供字符串的只读View。>>>s='abcdefghijklmnopqrstuv

python - 如何切片 2D Python 数组? : "TypeError: list indices must be integers, not tuple" 失败

我在numpy模块中有一个二维数组,如下所示:data=array([[1,2,3],[4,5,6],[7,8,9]])我想得到这个数组的一部分,它只包含元素的某些列。例如,我可能需要第0列和第2列:data=[[1,3],[4,6],[7,9]]最符合Pythonic的方法是什么?(请不要循环)我认为这会起作用:newArray=data[:,[0,2]]但结果是:TypeError:listindicesmustbeintegers,nottuple 最佳答案 错误明确地说:数据不是一个numpy数组,而是一个列表列表。首先尝试

python - 没有 SettingWithCopyWarning 的不可预测的 pandas 切片分配行为

是wellknown(和understandable)Pandas的行为在分配给切片时基本上是不可预测的。但我已经习惯了SettingWithCopy警告。为什么在以下两个代码片段中都没有生成警告,哪些技术可以减少无意中编写此类代码的可能性?#pandas0.18.1,python3.5.1importpandasaspddata=pd.DataFrame({'a':[1,2,3],'b':['a','b','c']})new_data=data[['a','b']]data=data['a']new_data.loc[0,'a']=100#nowarning,doesn'tpropa

python - 将 Python 切片语法传递给函数

在Python中,是否可以将通用切片语法精确封装并传递?我知道我可以使用slice或__slice__来模拟切片。但我想传递与我放在方括号中的语法完全相同的语法,这些语法将与__getitem__一起使用。例如,假设我编写了一个函数来返回列表的某个片段。defget_important_values(some_list,some_condition,slice):elems=filter(some_condition,some_list)returnelems[slice]如果我手动传入一个切片对象,这会很好地工作:In[233]:get_important_values([1,2,3

带逗号/列表的 Python 切片表示法

我遇到了一些带有切片符号的python代码,但我无法理解。它看起来像切片符号,但使用逗号和列表:list[:,[1,2,3]]这个语法有效吗?如果是,它有什么作用?edit看起来是一个2Dnumpyarray 最佳答案 假设对象真的是一个numpy数组,这被称为advancedindexing,并挑选出指定的列:>>>importnumpyasnp>>>a=np.arange(12).reshape(3,4)>>>aarray([[0,1,2,3],[4,5,6,7],[8,9,10,11]])>>>a[:,[1,2,3]]arra

python - 在 Numpy/Scipy 中切片数组

我有一个像这样的数组:a=array([[1,2,3],[3,4,5],[4,5,6]])从中切出只有“a”的前两列的1x2数组的最有效方法是什么?即array([[2,3],[4,5],[5,6]])inthiscase. 最佳答案 二维numpy数组使用a[i,j](不是a[i][j])进行索引,但您可以使用相同的切片符号numpy数组和矩阵,就像在python中使用普通矩阵一样(只需将它们放在一个[]中):>>>fromnumpyimportarray>>>a=array([[1,2,3],[3,4,5],[4,5,6]])>