(1) list 普通的链表,初始化后可以通过特定方法动态增加元素。定义方式:arr = [元素]
(2) Tuple 固定的数组,一旦定义后,其元素个数是不能再改变的。定义方式:arr = (元素)
(3) Dictionary 词典类型, 即是Hash数组。定义方式:arr = {元素k:v}
2、下面具体说明这些数组的使用方法和技巧:
(1) list 链表数组
a、定义时初始化
a = [1,2,[1,2,3]]
b、定义时不初始化一维数组:
arr = []
多维数组: arr = [i for i in range(10), 1,[]] #注意, i for in xx 这个必须放在第一个位置,否则要先定义i,
如:
arr = [i for i in range(5), j for j in range(5), []]
这是错误的
这是正确的
c、del 语句和 : 的用法
可以用 start : end 表示数组里的一个区间 ( i >= start and i <end)
del 删除数组里的指定元素
如:
d、遍历数组:
e、增加元素:
一维 arr.append('aaa')
二维 arr[0].append('aaa')
如果要在任意位置插入用 arr.insert(n, 值)
此外还有一种特殊的用法是:
arr += [数组元素]
在不指定下标的情况下,是允许用 += 增加数组元素的。
(2) Tuple 固定数组Tuple 是不可变 list,一旦创建了一个 tuple 就不能以任何方式改变它。
下面拿具体示例说明:
Tuple 没有的方法:
[1] 不能向 tuple 增加元素,没有 append 、 extend 、insert 等方法。
[2] 不能从 tuple 删除元素,没有 remove 或 pop 方法。
[3] 不能在 tuple 中查找元素,没有 index 方法(index是查找而不是索引,索引直接用下标即可,如:t[0])。
使用 tuple 的好处:
Tuple 可以转换成 list, 反之亦然。
转换方式为:
反之:
(2) Dictionary (哈希数组)词典数组
*Dictionary 的用法比较简单,它可以存储任意值,并允许是不同类型的值,下面实例来说明:
*下面例子中 a 是整数, b 是字符串, c 是数组,这个例子充分说明哈希数组的适用性。
*可以直接增加一个元素,如果同名,则会改变原来的key的元素的值
*输出所有的key
*输出所有的value
*遍历数组
python3里这样:>>>a=[1,2,3]
>>>b=2
>>>b in a
True #先判定b在a里
>>>a.index(b)
1 #b在a的位置1,数组第一个位置为0
参考代码如下:using System
using System.Collections.Generic
using System.Linq
using System.Text
namespace FindMaxWithIndex
{
/// <summary>
/// 有一个数组,每个元素的值都是实数,请写出求最大元素的值及其位置的算法
/// </summary>
class Program
{
static void Main(string[] args)
{
double[] Num = new[] { -8, 4543.9, 4543.9, 3, 45, 654.7, 7, 66, 35, 45, 4, 6, 4543.9, 5, 46, 54, 6, 43, 5.980, 34, 4543.9 }
//double[] Num = new [] { 1.0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
int[] index = SearchMaxWithIndex(Num)
Console.WriteLine("The max number is: {0}", Num[index[0]])
Console.Write("The index of max number is:")
for (int i = 0i <index.Lengthi++)
{
if (index[i] == -1) break
Console.Write(" '{0}'", index[i])
}
Console.ReadKey()
}
private static int[] SearchMaxWithIndex(double[] arr)
{
int[] pos = new int[arr.Length] //记录最大值所在位置的数组
int position = 0//初始设定数组的第1个元素为最大值
int j = 1//j指示位置数组pos的下标
for (int i = 1i <arr.Lengthi++)
{
if (arr[i] >arr[position])
{
position = i//记下新的最大值的位置
j = 1//位置数组pos的下标恢复为1,下标为0的位置为position预留
}
else if (arr[i] == arr[position])
pos[j++] = i//记下重复最大值的位置
}
pos[0] = position //位置数组pos的下标为0的位置为position预留
if (j <arr.Length) pos[j] = -1//-1为标识值,表示位置数组pos下标为0, 1, 2…(j-1)的位置存放的是最大值所在的位置
return pos
}
}
}