找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3123|回复: 6

[已解决] 列表是一维的吗

30

主题

116

帖子

116

积分

侠客

积分
116
chenmengdan 发表于 2016-9-28 20:49:50 | 显示全部楼层 |阅读模式
列表是一维的吗,如果不是,怎么改变列表的维度呢,就像改变数组的维度那样
回复

使用道具 举报

1419

主题

1891

帖子

291

积分

侠客

积分
291

最佳新人热心会员默默耕耘

whydo1 发表于 2016-9-28 22:06:39 | 显示全部楼层
可以使用NumPy模块. 也可以自己建立.
[[1,2,3],[4,5,6]],这个就是个二维列表
回复 支持 1 反对 0

使用道具 举报

30

主题

116

帖子

116

积分

侠客

积分
116
chenmengdan  楼主| 发表于 2016-9-29 09:33:00 | 显示全部楼层
whydo1 发表于 2016-9-28 22:06
可以使用NumPy模块. 也可以自己建立.
[[1,2,3],[4,5,6]],这个就是个二维列表

嗯,谢谢,使用numpy是先转换成数组操作,再转换成列表的形式吧,

那如何直接建立呢,不通过数组
回复 支持 反对

使用道具 举报

1419

主题

1891

帖子

291

积分

侠客

积分
291

最佳新人热心会员默默耕耘

whydo1 发表于 2016-9-29 12:05:45 | 显示全部楼层
用这样的代码也可以实现2维数组. 稍加修改也能实现多维数组. python版本 3.4.4
  1. 总行数 = 3
  2. 总列数 = 4

  3. 数组 = [ 元素 for 元素 in range( 总行数 * 总列数) ]

  4. #指定要取出哪一行哪一列的元素
  5. 行数 = 1
  6. 列数 = 2

  7. 下标 = (行数-1) * 总列数 + 列数-1
  8. print( 数组[下标] )
复制代码
回复 支持 反对

使用道具 举报

30

主题

116

帖子

116

积分

侠客

积分
116
chenmengdan  楼主| 发表于 2016-9-29 16:50:44 | 显示全部楼层
whydo1 发表于 2016-9-29 12:05
用这样的代码也可以实现2维数组. 稍加修改也能实现多维数组. python版本 3.4.4
...

你的这个是用来取值的,我不是太清楚这个跟我的问题有什么联系
回复 支持 反对

使用道具 举报

1419

主题

1891

帖子

291

积分

侠客

积分
291

最佳新人热心会员默默耕耘

whydo1 发表于 2016-9-30 10:20:30 | 显示全部楼层
列表的维度由你自己来控制. 我给你那段代码是想说明虽然维度看起来是非线性的, 但是最终存储时都是线性的, 所以其实一维或是多维从存储角度来讲并没有什么太大的不同. 当然, 变长列表有所不同.

上面的代码如果扩展一下, 可以实现自己的二维数组类:
  1. #-*- coding:utf-8 -*-

  2. class 二维数组():

  3.     def __init__(self,总行数,总列数, 初始值 = 0):
  4.         self.总行数 = 总行数
  5.         self.总列数 = 总列数
  6.         self.初始值 = 初始值
  7.         self.列表1 = []

  8.     def 初始化(self):
  9.         self.列表1 = [ self.初始值 轮取 元素 in range( self.总行数 * self.总列数) ]
  10.         返回 self.列表1

  11.     def 赋值(self, 行数, 列数, 元素值):
  12.         self.下标 = (行数-1) * self.总列数 + 列数-1
  13.         self.列表1[self.下标] = 元素值

  14.     def 取值(self, 行数, 列数):
  15.         下标 = (行数-1) * self.总列数 + 列数-1
  16.         返回 self.列表1[下标]

  17. 总行数 = 3
  18. 总列数 = 4

  19. 数组1 = 二维数组(总行数,总列数,0)
  20. 数组1.初始化()
  21. 数组1.赋值(2,2,17)

  22. 数组2 = 二维数组(4,5,0)
  23. 数组2.初始化()
  24. 数组2.赋值(4,5,29)
  25. print(数组1.取值(2,2), 数组2.取值(4,5))
复制代码
回复 支持 反对

使用道具 举报

1419

主题

1891

帖子

291

积分

侠客

积分
291

最佳新人热心会员默默耕耘

whydo1 发表于 2016-9-30 22:23:54 | 显示全部楼层
上面代码中, 第12行的 轮取 改为 for
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表