Python笔记:一个二维数组引发的问题

▲泡面℡△ 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

直接splitOK了……

▲泡面℡△ 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

VVrange(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

 

"""

""" 可以什么都不写的 

 

你可能感兴趣的:(算法,python,socket,list,正则表达式,django)