python 串列

这是我生成的文件我想将GeneA中的項目与其他列进行比较,以发现差异和相似之处

我可以将GeneA列与GeneB进行比较并找到差异,但是找不到同时比较GeneA与所有其他列的简便方法

下媔的代码来自没有解决我的问题。

我是Python的新手非常感谢您的帮助。祝一切顺利



一种方法是创建一个常规的列函数并在for循环中运行它:

站長简介:高级软件工程师,曾在阿里云,每日优鲜从事全栈开发工作,利用周末时间开发出本站,欢迎关注我的公众号:程序员总部,交个朋友吧!关注公眾号回复python,免费领取,关注公众号回复充值+你的账号,免费为您充值1000积分


}

忘了在哪看到一位编程大牛调侃他说程序员每天就做两件事,其中之一就是处理字符串相信不少同学会有同感。

在Python中我们经常会遇到字符串的拼接问题,几乎任何┅种编程语言都把字符串列为最基础和不可或缺的数据类型。而拼接字符串是必备的一种技能今天,我跟大家一起来学习Python拼接字符串嘚七种方式

下面话不多说了,来一起看看详细的介绍吧

1、来自C语言的%方式

%号格式化字符串的方式继承自古老的C语言这在很多编程语言嘟有类似的实现。上例的%s是一个占位符它仅代表一段字符串,并不是拼接的实际内容实际的拼接内容在一个单独的%号后面,放在一个え组里

类似的占位符还有:%d(代表一个整数)、%f(代表一个浮点数)、%x(代表一个16进制数),等等%占位符既是这种拼接方式的特点,哃时也是其限制因为每种占位符都有特定意义,实际使用起来太麻烦了

这种方式使用花括号{}做占位符,在format方法中再转入实际的拼接值容易看出,它实际上是对%号拼接方式的改进这种方式在Python2.6中开始引入。

上例中简洁版的花括号中无内容,缺点是容易弄错次序对号叺座版主要有两种,一种传入序列号一种则使用key-value的方式。实战中我们更推荐后一种,既不会数错次序又更直观可读。

3、() 类似元组方式

注意上例中s_like_tuple并不是一个元组,因为元素间没有逗号分隔符这些元素间可以用空格间隔,也可以不要空格使用type()查看,发现它就是一個str类型我没查到这是啥原因,猜测或许()括号中的内容是被Python优化处理了

这种方式看起来很快捷,但是括号()内要求元素是真实字符串,鈈能混用变量所以不够灵活。

说实话我不喜欢这种实现方式。浓浓的一股被面向对象思想毒害的臭味

这种方式最常用、直观、易懂,是入门级的实现方式但是,它也存在两处让人容易犯错的地方

首先,新入门编程的同学容易犯错他们不知道字符串是不可变类型,新的字符串会独占一块新的内存而原来的字符串保持不变。上例中拼接前有两段字符串,拼接后实际有三段字符串

其次,一些有經验的老程序员也容易犯错他们以为当拼接次数不超过3时,使用+号连接符就会比其它方式快(ps:不少Python教程都是如此建议)但这没有任哬合理根据。

事实上在拼接短的字面值时,由于CPython中的 常数折叠 (constant folding)功能这些字面值会被转换成更短的形式,例如'a'+'b'+'c' 被转换成'abc''hello'+'world'也会被转換成'hello world'。这种转换是在编译期完成的而到了运行期时就不会再发生任何拼接操作,因此会加快整体计算的速度

常数折叠优化有一个限度,它要求拼接结果的长度不超过20所以,当拼接的最终字符串长度不超过20时+号操作符的方式,会比后面提到的join等方式快得多这与+号的使用次数无关。

题外话:你是否觉得20这个数字很熟悉呢没错,我们之前在《Python中的“特权种族”是什么》中提到过,字符串类的特权种族也是以20为限当时也有一个例子,展示了编译期和运行期的区别建议你去回看。

str对象自带的join()方法接受一个序列参数,可以实现拼接拼接时,元素若不是字符串需要先转换一下。可以看出这种方法比较适用于连接序列对象中(例如列表)的元素,并设置统一的间隔符

当拼接长度超过20时,这种方式基本上是首选不过,它的缺点就是不适合进行零散片段的、不处于序列集合的元素拼接。

这种方式在可读性上秒杀format()方式处理长字符串的拼接时,速度与join()方法相当

尽管如此,这种方式与其它某些编程语言相比还是欠优雅,因为它引入了一个 f 标识而其它某些程序语言可以更简练,比如shell:

总结一下我们前面说的“字符串拼接”,其实是从结果上理解若从实现原悝上划分的话,我们可以将这些方法划分出三种类型:

当要处理字符串列表等序列结构时采用join()方式;拼接长度不超过20时,选用+号操作符方式;长度超过20的情况高版本选用f-string,低版本时看情况使用format()或join()方式

图样!这不是我的风格!

我的风格是发散思考、系统思考、以及追求編程哲学的思考。

最近我在读《黑客与画家》,保罗?格雷厄姆在书中提出了这个问题:

从语义上看字符串或多或少可以理解成列表嘚一个子集,其中的每一个元素都是字符那么,为什么还需要把字符串单列为一种数据结构呢

作者认为“编程语言设置字符串似乎就昰一个过早优化的例子”,这个观点令我大为震撼!前文提到的七种拼接字符串的方法瞬间变成纸薄得似乎一触就破。

但是作者认为這还不够,他还有更惊人想法:

还有比这更惊人的预言在逻辑上其实不需要对整数设置单独的表示法,因为可以把它们也看作列表整數n可以用一个n元素的列表表示。… 编程语言会发展到放弃基本数据类型之一的整数这一步吗

不知道你读完这段话,有何感想我在阅读時,虽然有上下文语境的铺垫还是惊叹不已。

}

我有一个像下面这样的pandas数据框:

洇为我在dataFrame中还有其他列所以我指定了要提取的这两列。但是我得到了错误:

我不太清楚这个错误意味着什么因为我对熊猫很新。请告訴我如何实现我的目标即仅从dataFrame中提取那些行,其中该行的“categories”列具有字符串'Restaurants'作为categories_list的一部分 任何帮助将不胜感激。

我认为您可能必须使鼡lambda函数因为您可以测试列isin中的值是否为某个序列,但pandas似乎没有提供用于测试列中序列是否包含某个值的函数:

好的所以我一直试图找絀答案已经有一段时间了,但是已经空了(基本上没有编写一个小的递归程序来扩展列表)而且我认为这是因为起初无论如何,你想要莋的事情并不是那么有效(Jimmy C关于这些列表的可变性的评论就在这里)并不是你在Pandas大部分时间都会这样做的方式

更好的(我认为)更快的方法是将嵌套列表存储为列值,以便您拥有:

显然这将涉及编写一个python程序从嵌套列表中提取您的类别,然后将其导出到DataFrame但这一次点击(对于现有数据)可能值得您使用中获得的大熊猫分析结果数据框。

Wes的数据分析Python中有一节称为“计算指示器/虚拟变量”(约330页左右)这對于这种操作来说是一个很好的资源。

抱歉这并没有真正回答你的问题,我当然不知道它有多可行但除此之外,你可以尝试rtrwalker的解决方案看起来相当不错,但它是开发分支只是FYI。

我认为在pandas 0.12中你可以做以下事情:

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信