▲泡面℡△ 13:34:10
请教一个正则表达式的写法。
▲泡面℡△ 13:35:14
打个比方我现在有一个串这样的字符串
no1%no2;no3;no4
用这样的规则来组成的
eg: 111%222;333%444
现在 我想通过正则表达式来把这个字符串分组出来。
第一次分组可以把
111%222
333%444
这样分别找出来
第二次就可以把
111
222
这样的方式找出来
求这个正则如何写。
在线等待,谢谢大家了。
骨头(socket) 13:36:43
这个不需要正则吧……
mT 13:36:54
说句题外话,像这样的东西,一般比较字符串的的效率比较高
▲泡面℡△ 13:36:58
啊。可以直接通过python来做?
mT 13:37:07
python的正则没写过。
骨头(socket) 13:37:15
直接split就OK了……
▲泡面℡△ 13:37:21
这样啊。
▲泡面℡△ 13:37:27
怎么样来做呢。
VV - django 13:37:42
>>> a = 111%222;333%444
333
>>> a = "111%222;333%444"
>>> b = a.split(";")
>>> b
['111%222', '333%444']
>>> for c in b:
print c.split("%")
['111', '222']
['333', '444']
骨头(socket) 13:38:29
>>> s = "111%222;333%444"
>>> for i in s.split(";"):
print i.split("%")
▲泡面℡△ 13:39:48
太好了。
VV - django 13:45:41
如果要生成一个以5为中间数的列表,比如[1,2,3,4,5,6,7,8,9],你们觉得怎么样最简便?
sharkke 13:50:27
VV:range(5-n,5+n+1)
VV - django 13:51:12
n的值是?
sharkke 13:51:44
可以是变量啊,要看你要一个多大的列表了
骨头(socket) 13:51:45
顶一个……sharkke的答案充分体现了PY的精神……
VV - django 13:51:45
刚弄了个 s = [ i for i in range(5*2)]
xun 13:52:02
range(2*x+1)
Lee(dir) 13:52:27
VV - django 的回答体现了什么精神呢
sharkke 13:52:35
>>> n = 10
>>> range(5-n,5+n+1)
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
>>>
VV - django 13:52:42
初级入门的精神。
sharkke 13:53:09
某却是刚入门,见笑了
VV - django 13:53:22
是我的回答刚入门
行在路上 13:53:39
呵呵
VV - django(7141346) 13:57:04
我读书的时候数学没有及格过。那个汗颜。想算法的时候总是稀里糊涂。
▲泡面℡△(569879601) 14:04:29
在这个python里怎么样使用数组呀。
▲泡面℡△(569879601) 14:04:36
有二维的数据没有呢。
mT(272443654) 14:04:58
[]
{}
VV - django(7141346) 14:04:58
试试 array
▲泡面℡△(569879601) 14:07:46
是这样子的。
▲泡面℡△(569879601) 14:07:52
def ConverStr2IntArr(st):
# 用于将一个(数据1%数据2;数据3%数据4)分组成为二维的
arrRet = []
n = 0
for i in st.split(';'):
for j in i.split('%'):
print j
print ConverStr2Int(j)
n = n+1
▲泡面℡△(569879601) 14:08:15
我是初学者啊。现在 想把这东西保存成为一个二维的数组
sharkke<[email protected]> 14:09:30
像C的风格
▲泡面℡△(569879601) 14:10:03
一直都是在写C/C++的。呵呵。现在 公司里要做这个所以开始学的。
骨头(socket)(87872084) 14:10:13
>>> s = "111%222;333%444"
>>> [i.split("%") for i in s.split(";")]
[['111', '222'], ['333', '444']]
▲泡面℡△(569879601) 14:11:24
骨头太强了。
叹服python(275898762) 14:14:15
可读性不好哦
▲泡面℡△(569879601) 14:14:34
def ConverStr2IntArr(st):
# 用于将一个(数据1%数据2;数据3%数据4)分组成为二维的
arrRet = { { } }
n = 0
m = 0
for i in st.split(';'):
arr2 = {}
for j in i.split('%'):
print ConverStr2Int(j)
arr2[m]=ConverStr2Int(j)
m = m+1
arrRet[n] = arr2
n = n+1
▲泡面℡△(569879601) 14:14:48
我现在 是这样写的。但是编译不过。
闲人(29738446) 14:15:01
编译!!!
sharkke<[email protected]> 14:15:19
arr2 是一个 tuple
▲泡面℡△(569879601) 14:15:43
没有编译过程 。
▲泡面℡△(569879601) 14:15:44
呵呵。
▲泡面℡△(569879601) 14:15:56
arrRet = {}
▲泡面℡△(569879601) 14:16:10
改成这样就可以了。只是这个内容是
▲泡面℡△(569879601) 14:16:20
{0: {0: 111, 1: 222}, 1: {2: 333, 3: 444}}
sharkke<[email protected]> 14:18:06
错了,dict
▲泡面℡△(569879601) 14:20:35
这种二维数组好像不能通过
arr[1][1]来访问。
一般使用什么方式来访问呢。
▲泡面℡△(569879601) 14:21:03
arr2 = arr[1]
print arr2[1]
我都搞了二次才访问到。
sharkke<[email protected]> 14:21:54
>>> s
'111%222;333%444'
>>> a = [i.split("%") for i in s.split(";")]
>>> a
[['111', '222'], ['333', '444']]
>>> a[0][0]
'111'
▲泡面℡△(569879601) 14:22:42
如果我想把这个字符转成一个数字类型的吗?
sharkke<[email protected]> 14:22:58
支持socket,泡面在学C语言呢
▲泡面℡△(569879601) 14:23:19
可以直接使用int()?
sharkke<[email protected]> 14:23:30
help()
大师兄(H)(40375) 14:24:04
int() str() 都可以的吧 反正我没用parseInt
▲泡面℡△(569879601) 14:26:32
n = [i.split("%") for i in int(st.split(";"))]
▲泡面℡△(569879601) 14:26:48
这样写的话好像不行。int是不能转一个list
大师兄(H)(40375) 14:27:49
哦 list 肯定不行 这个没搞过了 你多试验下吧
sharkke<[email protected]> 14:35:30
>>> a
[['111', '222'], ['333', '444']]
>>> for i in xrange(len(a)):
for j in xrange(len(a[i])):
a[i][j] = int(a[i][j])
>>> a
[[111, 222], [333, 444]]
Lee(dir)(31479597) 14:35:47
哇噢
▲泡面℡△(569879601) 14:35:52
▲泡面℡△(569879601) 14:36:07
真是强。
Lee(dir)(31479597) 14:36:39
>>> a = [['111','222'],['333','444']]
>>> [[int(i) for i in j] for j in a]
[[111, 222], [333, 444]]
>>>
sharkke<[email protected]> 14:36:57
……………………
嘿嘿<[email protected]> 14:37:00
高手的我都看不懂
嘿嘿<[email protected]> 14:37:07
lee果然高手
Lee(dir)(31479597) 14:37:17
不要拍mp
sharkke<[email protected]> 14:37:18
嘿嘿<[email protected]> 14:37:51
>>> [[int(i) for i in j] for j in a]
[[111, 222], [333, 444]]---这个我真的看不明白,我才不拍呢,我怕我拍坏了
叹服python(275898762) 14:38:02
油诗后我真的不懂为什么要这么写哦,不好读的
叹服python(275898762) 14:38:28
分开来多好啊
Lee(dir)(31479597) 14:39:24
看习惯了就好了。
叹服python(275898762) 14:39:59
费劲,呵呵,个人想法。
Lee(dir)(31479597) 14:40:01
这样写有两个好处
嘿嘿<[email protected]> 14:40:08
你为啥这么写?太简洁了我都不明白
▲泡面℡△(569879601) 14:40:14
这个语法怎么会这样子的。
▲泡面℡△(569879601) 14:40:18
好像是反过来的。
嘿嘿<[email protected]> 14:40:44
泡面给正过来就好了
Lee(dir)(31479597) 14:40:47
两个好处:
1. 代码少,简洁,容易维护
2. 没有副作用! 这一点要慢慢体会
3. 避免计数错误
▲泡面℡△(569879601) 14:41:04
▲泡面℡△(569879601) 14:41:07
这东西不会。
叹服python(275898762) 14:41:13
技术错误
叹服python(275898762) 14:41:16
计数
▲泡面℡△(569879601) 14:41:43
是啊。计数器都不要。
叹服python(275898762) 14:41:58
不是这意思吧
Lee(dir)(31479597) 14:41:58
没有副作用这一点其实是很重要的
sharkke<[email protected]> 14:42:00
xrange(len(a)) 也不会技术错误啊
mT(272443654) 14:42:17
我不是很赞成Lee的观点。
我觉得 在一定的基础上,可读性是最重要的
Lee(dir)(31479597) 14:42:30
我觉得我的更可读。
叹服python(275898762) 14:42:39
特别在协作时
大师兄(H)(40375) 14:42:53
刚才才在另一个群里面争完了这个问题...
叹服python(275898762) 14:43:00
结果
Lee(dir)(31479597) 14:43:12
python 用惯的人再看多层的for 会很不爽
嘿嘿<[email protected]> 14:44:01
我听说测试工程师不会编代码的很多,如果他们不理解这段代码,怎么办?
mT(272443654) 14:44:09
今把别人的写的东西翻出来,发现好几百行的代码没有一行注释,包含类的注释,和函数的注释。
体会到一句话:“写好注释是职业道德”
叹服python(275898762) 14:44:10
看来我没用惯 ,好,我继续用
mT(272443654) 14:44:12
呵呵
大师兄(H)(40375) 14:44:15
谁都不服谁 写个冒泡排序的 算法 非要抓着那个被排的数组的命名不放 叫abcd有啥区别
临时变量 叫tmp真地会不如temp好?
mT(272443654) 14:44:43
我服Lee
嘿嘿<[email protected]> 14:44:46
晕死
叹服python(275898762) 14:44:51
呵呵
mT(272443654) 14:44:56
我服大师兄(H)
Lee(dir)(31479597) 14:45:04
继续说没有副作用这一点
大师兄(H)(40375) 14:45:12
mT(272443654) 14:45:32
昨说那个gis那哥们,我也服
嘿嘿<[email protected]> 14:45:34
能举例说明下么?照顾我这个还不明白的
Lee(dir)(31479597) 14:45:46
[[int(i) for i in j] for j in a]
这里,描述的是一个表达式的值应该是什么 : int(i) ,没有赋值操作。
mT(272443654) 14:45:47
还有 叹服python
mT(272443654) 14:46:09
不说鸟,听Lee上课
sharkke<[email protected]> 14:46:11
好
Lee(dir)(31479597) 14:46:19
看到这样一行,我们一眼可以确定,这一行只得到了一个 值 ,而没有对程序其他部分的赋值。
叹服python(275898762) 14:46:55
详细点哈
嘿嘿<[email protected]> 14:46:57
可以理解为赋值到了a中么?
Lee(dir)(31479597) 14:47:03
不可以。
sys(13743333) 14:47:13
lee
Lee(dir)(31479597) 14:47:34
它生成一个新的list对象。 生成后你把a 再指向它而已。
嘿嘿<[email protected]> 14:47:52
袄,这样子,明白一些了
Lee(dir)(31479597) 14:48:00
前面的双重循环的,属于 in-place 的替换。
叹服python(275898762) 14:48:01
恩
sharkke<[email protected]> 14:48:21
支持
sharkke<[email protected]> 14:48:29
Lee
Lee(dir)(31479597) 14:49:24
?
sharkke<[email protected]> 14:49:51
支持Lee
▲泡面℡△(569879601) 14:50:21
# 构造器
self.xlApp = Dispatch('Excel.Application')
if filename:
self.filename = filename
self.xlBook = self.xlApp.Workbooks.Open(filename)
self.xlBook.Worksheets("Sheet1").
else:
大师兄(H)(40375) 14:50:26
虽然没看明白(话题开始的时候不在) 不过支持 python 支持 lee 支持简洁 支持明了 坚决抵制写个js还要array=new array的装B者
叹服python(275898762) 14:50:36
有道理,看来只要加上注释就行
大师兄(H)(40375) 14:51:16
python里面 没有//的注释么? 只能不停的用# 么?
Lee(dir)(31479597) 14:51:40
"""
我是三行的
注释
"""
大师兄(H)(40375) 14:51:54
哦 明白啦~
叹服python(275898762) 14:52:18
'''
随便多少行都可以
'''
闲人(29738446) 14:52:42
""" 这个做注释是不是值得商榷?
大师兄(H)(40375) 14:52:52
"""
""" 可以什么都不写的