科学网

 找回密码
  注册

tag 标签: string

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

Rosalind-CONS-String Algorithms
lucky7 2019-10-8 22:09
题目( 点我 )很好理解,难点在于python擅长行计算而不是列计算,需要一些额外的循环和存储。我的无脑解法为: fromBioimportSeqIO fromcollectionsimportCounter,OrderedDict importoperator defcons(file): #用biopython里面的SeqIO模块帮助读入fasta文件并存储进一个字典,key是tag,value是序列 dic={} i=0 length_list= =record.seq length_list.append(len(record.seq)) #检查是否所有序列都一样长 length_set=set(length_list) iflen(length_set)1: print('Sequenceshavedifferentlengths!') #在Rosalind里面肯定都是干净的数据,但在实操里只能去最短的 length=sorted(length_set) #计算每个位置的共识 con= , 'C': , 'T': forkeyindic: temp_list.append(dic ) temp_dic=Counter(temp_list) #profile forkeyindic_matrix: dic_matrix .append(temp_dic ) #consensus sorted_list=sorted(temp_dic.items(),key=operator.itemgetter(1)) con.append(sorted_list ) #将字典按key排序,以便输出时按照ACGT的顺序,后面强人代码可见这是没有必要的 profile_dic=OrderedDict(sorted(dic_matrix.items())) print(''.join(con)) forkeyinprofile_dic: print(key+':'+''.join( ])) 好了下面是卖家秀(根据Darkstar的python2版本修改而成) fromBioimportSeqIO withopen('data/cons_example.fa')asf: #读入所有序列入一个list(而不是字典) strands= #最为关键的一步,保证下面的操作都是按列而不是按行 matrix=zip(*strands) #下面这行返回一个listofdictionary,每一个item就是每一列的profile,信息量太大,代码后详解 profile_matrix=list(map(lambdax:dict((base,x.count(base))forbaseinACGT),matrix)) #计算每一列的共识,max()函数还可以定制key呢 consensus= print(.join(consensus)) #按格式要求打印出profile,使用了print()函数不自动加换行符 forbaseinACGT: print(base+:,end='') forxinprofile_matrix: print(str(x ),end='') print() 上面*的用法详见 此贴 的第四种,神操作啊。 至于信息量很大的那一行,首先是用map()函数对zip之后的序列进行了一个操作(reminder: zip之后iterable的每个item已经是列了哦),这是一个什么操作呢?这个操作/函数是自己写的lambda函数,具体内容是要数每个zip 之后的iterable item/列/x 里面base的数目(x.count);base是啥呢,请遍历ACGT,也就是依次数这四个碱基啦,数好之后放到字典里dict(),key是base,value是count. 最后把map函数的运行结果用一个list存起来,就可以反复调用啦。希望解释明白了。。。 这就是买家秀和卖家秀的差距。。。用zip()函数变行为列是真正实现字符matrix的时刻,不用依赖pandas了呢。
个人分类: Rosalind|2105 次阅读|0 个评论
windows max path导致的问题ValueError: source code string ...
LUCKYLUFFY 2018-3-2 11:33
【版权所有,转载请注明出处】 问题描述:运行 python 程序,在 import 语句部分出现: ValueError: source code string cannot contain null bytes 错误 网络搜索出来的结果: 解决方案: linux 下面运行 sed -i 's/\\x0//g' Filename 测试方法:无效 问题回想:本机安装python 3的时候有一个 Disable path length limit的选项,但是服务器上安装的时候没有,所有猜测与这个有关。 查看系统配置:本机( Win 10 1709 )服务器( Win10 1511 ) 检索到的帖子:http://mspoweruser.com/ntfs-260-character-windows-10/ Open Group Policy Editor (Press Windows Key and type gpedit.msc and hit Enter key . Navigate to the following directory: Local Computer Policy Computer Configuration Administrative Templates System Filesystem NTFS . Click Enable NTFS long paths option and enable it. 来自 http://mspoweruser.com/ntfs-260-character-windows-10/ 查看本机的配置【计算机配置 - 管理模板 - 文件系统】 查看服务器的竟然没有这个 好吧,所以问题的解决方案来了。 想方设法把 path (from module import * 中的module的路径) 的长度 改短一些(比如重命名,比如移动文件夹and so on)。 果然,问题迎刃而解!
个人分类: Tip|8819 次阅读|0 个评论
【弹幕规则V1.1】
热度 1 zhuoqing 2017-2-26 16:49
基于微信平台的课堂交互应答系统中,除了直接应用于课堂应答交互功能之外, 同学们可以使用投影屏幕的弹幕实时便捷与讲座教师进行交互,课间也可以相互之间 进行实时信息发布和沟通。为了更好地利用此平台,通过下面将发送弹幕效果方式进行总结: 0. 发送的基本方式 登录微信订阅公众号 tsinghuazhuoqing后,便可以通过发送短信和图片进行实时发送交互信息了。 图片信息只有在课堂软件开启特定搜集功能时才能够实时显示,普通情况下只会实时显示文字信息。 发送微信交互信息按照正常发送微信的格式,发送数字、中文或者英文都可以参与到正常的课堂交互 过程。屏幕弹幕的一般显示方式是从屏幕右方往左边滚动显示,停留时间是10秒钟。现实的位置和颜色 是有教学软件根据当时正在滚动显示的字幕多少自动分配的位置和颜色。如果发送信息前具有空格, 加号‘+’,星号'*',弹幕文字会处于屏幕边缘。具体参见下面的规则。 特殊微信发送命令: @name class: 注册真实姓名和班级命令。例如:@张三 自54 将会将自54 张三与该微信号进行绑定。 help:获得帮助信息,微信将返回本文档的网页。 下面将会介绍一些有发送者通过增加信息的前缀符和后缀符能够控制字幕显示效果的方法。可以修改 字幕显示效果包括有:字幕的字体大小、颜色、运动轨迹、速度、变化模式,重复次数以及是否闪烁。 在下文介绍中,使用如下面字符串分表代表各字段的信息。 STRING------用户要发的信息 N-----------数字 1.控制弹幕显示时间TIME。字幕基础持续时间10s,可以通过以下四种情况设置字符显示时间: ①STRING.. 消息结尾若是‘.’,则后方每增加一个‘.’,最终显示时只保留一个‘.’弹幕持续时间+5s; ②STRING..N 弹幕持续时间+5*Ns; ③(空格)STRING(空格) STRING前空格数量: 0:普通飞行弹幕; 1:弹幕出现在屏幕边缘,时间到了返回隐藏; =2:弹幕出现在屏幕边缘,时间到了飞出屏幕; STRING之后空格数量: 0:在边缘弹幕的情况下,弹幕被均匀分布在屏幕左右; 1:在边缘弹幕的情况下,弹幕出现在屏幕左边; =2:在边缘弹幕的情况下,弹幕出现在屏幕的右边; *STRING,+STRING:边缘弹幕 ④STRING~N 弹幕持续时间为Ns; 注意,其中波浪线~是半角字符(英文字符)。后面所出现的波浪线~均指的是半角英文字符。 例:若想让弹幕持续时间为25s STRING=“喵....” “喵..3” “(空格)(空格)(空格)喵” “喵~25” 2.移动方向。有两种方式可以控制字幕运动方向. 法一:在正常发送字符串后面增加空格。STRING(空格) 空格个数 运动方向: 0 向左 1 向右 2 向下 3 向上 4 向右下方 5 向左下方 6 放大效果 7 缩小效果 法二:STRING~(后缀字符) 后缀字符 运动方向 l 向左 r 向右 t 向上 b 向下 d 向左下 a 向右下 p 放大效果 s 缩小效果 3.控制字幕字体大小和颜色: STRING~(后缀) 大小 +N 大小为(24*(N+1)) (N为0-9) -N 大小为24/(N+1) 颜色 \c 红 \e 黄 \w 灰 \g 绿 \b 蓝 \y 紫 \j 品红 \k 黑 (大写写颜色变深) 4. 控制字幕显示的特效: STRING~(后缀) 后缀 特殊效果: i 闪烁 o 掉落(速度为二次曲线) u 往返 / 重复一次 /N 重复(N+1)(0-99)次 注: 所有控制字符均可连续写在一个后缀识别符号‘~’之后 例: 持续35秒、向上、字体放大、红色、闪烁、掉落、往返、重复7次的弹幕: “喵~35T+2\Riou/7” 5. 精简运动模式控制方法,除上述方法之外可以直接在输入信息之后增加一个后缀字符以控制字幕运行方式。 STRING : STRING往左滚动 STRING : STRING往右滚动 STRING/ : STRING对角线(左上右下)运动 STRING\ : STRING反对角线(右上左下)运动 STRING+ : STRING膨胀 STRING- : STRING缩小 STRING*, STRING^ : STRING浮起 STRING%, STRING| : STRING下落 STRING@ : STRING往返闪烁 STRING# : STRING往返 STRING$ : STRING闪烁 *STRING , +STRING :STRING位于屏幕边缘
个人分类: 我的教学|4572 次阅读|1 个评论
[转载]Python转义与raw string
xyzg198891 2016-11-3 16:18
在Python的字符串中,一些特殊的转义字符具有特殊的意义。比如,在字符串中的'\n'表示的是换行,'\b'表示的是回退键(Backspace),等等。详细的转义字符表可以查看 这里 。我们可以看到,对于转义字符,我们需要在前面加上一个反斜杠来表示。那么,如果我们需要在字符串中使用一个反斜杠,而不是把这个反斜杠用于转义的时候,我们需要使用两个反斜杠来表示'\\'。 所以,如果我们希望在字符串中包含'\n',但是我们不希望进行转义,那么可以在前面的反斜杠之前添加上一个反斜杠来进行跳脱(escape)。所以'\\n'就变成了单纯的'\n'字符了,而不是一个换行符。反斜杠的作用就是用来对转义字符进行跳脱。除了使用反斜杠来进行转义字符的跳脱,也可以用Python的raw字符串来达到同样的效果,python的raw字符串可以在字符串前面加上一个字符r来表示:r'raw string',这个字符串就是一个raw字符串。在raw字符串中,所有的转义都将失去作用,所以r'\n'将表示两个字符'\'和'n',而不是一个换行符。 前面我们讲到了Python中的转义字符,那转义字符对正则表达式有什么影响呢? 我们知道,正则表达式实际上就是一个字符串,和别的字符串的区别就是它们可以被正则表达式引擎解析和执行。所以,为了使正则表达式可以正常的工作,我们需要保证传递给正则表达式引擎的正则表达式字符串的语法是正确的,并且是我们期望的样子。但是,由于Python中的转义字符的存在,并且,在正则表达式的元字符中也包含了反斜杠,所以我们需要正确地处理正则表达式中的反斜杠。 如果我们需要在正则表达式中使用反斜杠本来的意思,而不是作为元字符使用,那么我们需要传递给正则表达式引擎的就是一个'\\'表示的字符串。其中第一个反斜杠用于对后面的反斜杠进行跳脱,使得后面的反斜杠失去元字符的作用。现在,我们需要两个反斜杠'\\'传递给正则表达式引擎,那么,我们需要用'\\\\'这样的Python字符串来表示。为什么呢?因为,我们是在Python中使用正则表达式,并且正则表达式是使用Python中的字符串表示的,那么考虑到Python中转义字符的问题,我们如果需要一个反斜杠,那么需要在字符串中这样表示'\\',如果需要两个,那么就要这样表示'\\\\'。这样,我们的Python字符串就会产生两个反斜杠组成的字符串了。 而对于正则表达式的一些特殊的元字符,比如'\d',如果用Python的字符串表示,则需要表示成'\\d'来保证传递给正则表达式引擎的是'\d'。 print ( ' \\ ' ) \ print ( ' \\\\ ' ) \\ print ( ' \\ d' ) \ d 如果正则表达式中包含了很多的反斜杠,这样会导致正则表达式变的复杂和难以理解,所以,我们一般都用Python的raw字符串来表示一个正则表达式。因为在raw字符串中,反斜杠将不具有特殊用途,所以r'\\'表示'\\',r'\d'表示'\d'。 print ( r'\\' ) \\ print ( r'\d' ) \ d 我们在编写正则表达式的时候,都应该使用Python的raw字符串来表示。
个人分类: Python|3 次阅读|0 个评论
[转载]Python string formatting
xyzg198891 2016-10-18 21:53
在python中也有类似于c中的printf()的格式输出标记。在python中格式化输出字符串使用的是%运算符,通用的形式为 格式标记字符串 % 要输出的值组 其中,左边部分的”格式标记字符串“可以完全和c中的一致。右边的'值组'如果有两个及以上的值则需要用小括号括起来,中间用短号隔开。重点来看左边的部分。左边部分的最简单形式为: %cdoe 其中的code有多种,不过由于在python中,所有东西都可以转换成string类型,因此,如果没有什么特殊需求完全可以全部使用’%s‘来标记。比如: '%s %s %s' % (1, 2.3, ) 它的输出为'1 2.3 ',就是按照%左边的标记输出的。虽然第一个和第二值不是string类型,一样没有问题。在这个过程中,当电脑发现第一个值不是%s 时,会先调用整型数的函数,把第一个值也就是1转成string类型,然后再调用str()函数来输出。前面说过还有一个repr()函数,如果要用这个 函数,可以用%r来标记。除了%s外,还有很多类似的code: 整型数:%d 无符号整型数:%u 八进制:%o 十六进制:%x %X 浮点数:%f 科学记数法: %e %E 根据数值的不同自动选择%e或%f: %g 根据数值的不同自动选择%E或%f: %G 就跟前面说用\进行转义一样,这里用%作为格式标记的标识,也有一个%本身应该如何输出的问题。如果要在”格式标记字符串“中输出%本身,可以用%%来表示。 上面说的只是格式标记的最简间的形式,来看复杂一点的: ‘%6.2f’ % 1.235 在这种形式中,在f的前面出现了一个类似小数的6.2它表示的意思是,总共输出的长度为6个字符,其中小数2位。还有更复杂的: ‘%06.2f’ % 1.235 在6的前面多了一个0,表示如果输出的位数不足6位就用0补足6位。这一行的输出为‘001.24’,可以看到小数也占用一位。类似于这里0这样的标记还有-、+。其中,-表示左对齐,+表示在正数前面也标上+号,默认是不加的。最后来看最复杂的形式: ‘%(name)s:%(score)06.1f’ %{'score':9.5, 'name':'newsim'} 这种形式只用在要输出的内容为dictionary(一种python的数据类型)时,小括号中的(name)和(score)对应于后面的键值 对中的键。前面的例子可以看到,”格式标记字符串“中标记的顺序和要输出的值组中的值是一一对应的,有顺序,一对一,二对二。而在这种形式中,则不 是,每个格式标记对应哪个值由小括号中的键来指定。这行代码的输出为:'newsim:0009.5'。 有时候在%6.2f这种形式中,6和2也不能事先指定,会在程序运行过程中再产生,那怎么输入呢,当然不能用%%d.%df或%d.%d%f。可 以用%*.*f的形式,当然在后面的”要输出的值组“中包含那两个*的值。比如:'%*.*f' % (6, 2, 2.345)就相当于'%6.2f' % 2.345。 这是这本书到此为止看起来最复杂的内容。不过如果记不住,或不想那么耐烦,完全可以全部用%s代替,或者用多个+来构造类似的输出字符串。这里的%真有点除法的味道,怪不得设计者会选择用%这个除号。 象C 中的sprintf函数一样,可以用“%”来格式化字符串。 Table 3.1. 字符串格式化代码 格式 描述 %% 百分号标记 %c 字符及其ASCII码 %s 字符串 %d 有符号整数(十进制) %u 无符号整数(十进制) %o 无符号整数(八进制) %x 无符号整数(十六进制) %X 无符号整数(十六进制大写字符) %e 浮点数字(科学计数法) %E 浮点数字(科学计数法,用E代替e) %f 浮点数字(用小数点符号) %g 浮点数字(根据值的大小采用%e或%f) %G 浮点数字(类似于%g) %p 指针(用十六进制打印值的内存地址) %n 存储输出字符的数量放进参数列表的下一个变量中
个人分类: Python|1 次阅读|0 个评论
[转载]Jaro-Winkler Distance 浅析
wl2119 2014-6-29 22:01
Jaro-Winkler Distance 浅析 这是一种计算两个字符串之间相似度的方法,想必都听过Edit Distance,Jaro-Winkler Distance 是Jaro Distance的一个扩展,而Jaro Distance(Jaro 1989;1995)据说是用来判定健康记录上两个名字是否相同,也有说是是用于人口普查,具体干什么就不管了,让我们先来看一下Jaro Distance的定义。 两个给定字符串S1和S2的Jaro Distance为: m是匹配的字符数; t是换位的数目。 两个分别来自S1和S2的字符如果相距不超过 时,我们就认为这两个字符串是匹配的;而这些相互匹配的字符则决定了换位的数目t,简单来说就是不同顺序的匹配字符的数目的一半即为换位的数目t,举例来说, MARTHA 与 MARHTA 的字符都是匹配的,但是这些匹配的字符中,T和H要换位才能把 MARTHA 变为 MARHTA ,那么T和H就是不同的顺序的匹配字符,t=2/2=1. 那么这两个字符串的Jaro Distance即为: 而Jaro-Winkler则给予了起始部分就相同的字符串更高的分数,他定义了一个前缀p,给予两个字符串,如果前缀部分有长度为 的部分相同,则Jaro-Winkler Distance为: d j 是两个字符串的Jaro Distance 是前缀的相同的长度,但是规定最大为4 p 则是调整分数的常数,规定不能超过0.25,不然可能出现dw大于1的情况,Winkler将这个常数定义为0.1 这样,上面提及的 MARTHA 和 MARHTA 的Jaro-Winkler Distance为: d w = 0.944 + (3 * 0.1(1 − 0.944)) = 0.961 以上资料来源于维基百科: http://en.wikipedia.org/wiki/Jaro-Winkler_distance 这样一来很容易写出这个算法的代码: 1: double jaro_distance(string s1,string s2) 2: { 3: if (s1.empty()||s2.empty()) 4: { 5: if (s1.empty()s2.empty()) 6: return 1.0; 7: return 0.0; 8: } 9: int allowrange=max(s1.length(),s2.length())/2-1; 10: int i,j; 11: bool is_match=false; 12: int *matches= new int ; 13: //将s2中匹配的字符标号,这个标号的意义在于计算t的值, 14: //从前往后遍历,如果顺序不对,则肯定要调换 15: //DWAYEN 16: //0-132 这是一个matches的例子 17: //DUANE 18: for (i=0;is2.length();++i) 19: matches =-1; 20: double m=0; //匹配的数目 21: for (i=0;is1.length();++i) 22: { 23: is_match=false; 24: for (j=i;is_match==false j=0 j=i-allowrange;--j) 25: { 26: if (s2 ==s1 ) 27: { 28: matches =m++; 29: is_match=true; 30: } 31: } 32: for (j=i;is_match==false js2.length() j=i+allowrange;++j) 33: { 34: if (s2 ==s1 ) 35: { 36: matches =m++; 37: is_match=true; 38: } 39: } 40: } 41: double t=0; 42: i=0; 43: for (j=0;js2.length();++j) 44: { 45: if (matches !=-1) 46: { 47: if (matches !=i++) 48: ++t; 49: } 50: } 51: delete !=s2 ) 63: break ; 64: ++len; 65: } 66: double dj=jaro_distance(s1,s2); 67: return dj+p*len*(1-dj); 68: }
个人分类: Matlab|2992 次阅读|0 个评论
[转载]MATLAB cell类型转string类型
zhoufcumt 2012-8-3 14:40
转载自: http://blog.sina.com.cn/s/blog_59fac9970100clz7.html 在matlab中调用strcat() 函数获得的是一个cell类型的变量,而不是string类型。这是如果我们直接把这个cell类型的变量,传递到其他函数中作为string类型使用,就是出现问题,下面是一个例子: names={'fyc','hy','ljg','lqf','lsl','ml','nhz','rj','syj','wl','wq','wyc','xch','xxj','yjf', 'zc','zdx','zjg','zl','zyf'}; len_names=length(names); for i=1:len_names url=strcat('D:\GaitDatasetA-silh\silhouettes\',names(i),'\00_1'); url=url{1} ;%将cell类型转换为string类型 end 正如上面所示的一样,url调用strcat('D:\GaitDatasetA-silh\silhouettes\',names(i),'\00_1');得到的是一个cell类型的变量,此时需要对url做一些变换就可以了,使用url=url{1};就搞定了!
个人分类: Matlab|9385 次阅读|0 个评论
C++中string二维数组的动态申请
shixinyi 2012-6-13 08:46
闲话不说! string** arr=new string* ; for(int i=0;i10;i++) arr =new string ; 得到二维数组arr 。
个人分类: 编程要点|11842 次阅读|0 个评论
[转载]transfer from string to wstring
chuangma2006 2012-4-8 07:29
#include sstream std :: string narrow = "narrow" ; std :: wstring wide = "wide" ; std :: wstringstream cls ; cls " abc " narrow . c_str () L " def " wide . c_str (); std :: wstring total = cls . str ();
个人分类: Cpp|1938 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-2 20:47

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部