《think in python》学习-10
think in python 10
列表
和字符串相似,列表是值得序列。在列表中,它可以是任何类型,列表中的值成为元素,有时也称为列表项
s = [10,20,30,40]
print s
#列表也是可嵌套的。
s = [10,20,30,[2,3,4]]
print s
列表是可变的
s = [10,20,30,[2,3,4]]
print s
s[1] = 15
print s
通过操作下班,改变了 列表中的某个值。
遍历一个列表
for i in s:
print i
for i in range(len(s)):
print s[i]
操作列表
a = [1,2,3]
b = [4,5,6]
c = a+b
print c
d = a*4
print d
+
号操作符可以拼接列表,*
号可以重复一个列表多次
列表切片
切片操作也可以用于列表
word = ['a','b','c','d','e','f','g']
# [start:end:length]
print word[::-1]
print word[:]
print word[3:4]
列表方法
append
方法可以在列表尾部添加新的元素
word.append("h")
print word
extend
接受一个列表作为参数,并将其附加到列表中
word2 = ['i','j','k']
word.extend(word2[::-1])
print word
sort
方法将列表中的元素从低到高重新排序
word.sort()
print word
删除元素
从列表中删除元素,有很多方法,如果你知道下班可以使用pop
pop
返回被删掉的值
w = word.pop(1)
print w
del
则是直接删掉指定的值
del word[1]
remove
可以删掉元素本身
word = ['A','B']
word.remove('A')
删除多个 可以利用 del
配合 切片进行
del word[1:5]
列表和字符串
字符串是
字符
的序列, 列表是值
的序列。
list
函数可以将字符串转换成一个字符的列表
name='hebo'
sn = list(name)
print sn
split
可以按指定方式拆分字符
s =' hello world today'
ns = s.split()
print ns
练习
- 编写一个函数
nested_sum
接受一个由内嵌的整数列表组成的列表作为形参,并将内嵌列表中的值全部加起来。def nested_sum(list): l = [] for i in list: l += i return sum(l) print nested_sum([[1,2,3,4],[3,2,4,5]])
- 编写一个函数,接受一个数字列表,并返回其积累和,即一个新的列表,期第i位元素是原始列表的前i+1元素的和
def sum_list(list): r = [] for i in list: r.append(sum(list[:i])) return r print sum_list([1,2,3])
- 写一个
middle
函数,接受一个列表作为形参,返回一个新列表。包含除了第一个和最后一个元素之外的所有元素def middle(n): return n[1:len(n)-1]
- 编写一个
chop
函数,接受一个列表,修改它,删除它第一个和最后一个元素 并返回Nonedef chop(list): del list[0] del list[len(list)-1] return None
- 编写一个
is_sorted
来判断一个列表是否按照升序排列。def is_sorted(list): s=list[:] s.sort() for i in range(len(list)-1): if s[i]!=list[i]: return False return True
- 编写一个
has_duplicates
函数,接受一个列表,当其中任何一个元素出现多一于一次,返回Truedef has_duplicates(list): s = list[:] s.sort() for i in range(len(s)-1): if s[i]==s[i+1]: return True return False print has_duplicates([1,2,3,4,5])
- 一个班级有23个学生,其中2个人生日相同几率有多大?随机生成23个同学的生日样本,并检查是否有相同几率。
def random_bdays(n): t = [] for i in range(n): t.append(random.randint(1,365)) return t print random_bdays(23) def count_sambday(stu): count = 0 for i in range(365): t = random_bdays(stu) if has_duplicates(t): count +=1 return count print count_sambday(23)
- 并写一个
remove_duplicates
接受一个列表,返回一个新列表,其中只包含原始列表中的每个元素 唯一一份。def remove_duplicates(list): r = [] for i in list: if r.count(i)<1: r.append(i) return r print remove_duplicates([1,1,3,4,5,6,7])
- 编写一个函数 读取
words.txt
并构建一个列表,每个元素是一个单词,给这个函数编写2个版本,其中一个使用append
方法,另一个使用t=t+[X]
这样,那个运行时间更长?def word_list(): fin = open("words.txt") r = [] for i in fin: word = i.strip() r.append(word) return r def word_list2(): r = [] fin = open("words.txt") for i in fin: word = i.strip() r += [word] return r def count_time(fn): start = time.time() l = fn() end = time.time() print fn.__name__,"result",len(l), ",run ",end - start,"s" count_time(word_list) count_time(word_list2)
- 写一个函数 查找单词表中出现的反向词(一个单词是另外一个的反向序列)
def make_word_list(): word_list = [] fin = open('words.txt') for line in fin: word = line.strip() word_list.append(word) return word_list word_list = make_word_list() def reverse_pair(wordlist,word): rev = word[::-1] return to_bisect(wordlist,rev) for word in word_list: if reverse_pair(word_list,word): print word,word[::-1]
术语表
- 列表(list):值的序列
- 元素(element):列表或者其他序列中的一个值,也称为列表项
- 下标(index):标明元素在列表中的位置的整数值
- 嵌套列表(nested list):作为其他列表的元素的列表
- 映射(mapping):一种关联,表示一个集合的每个元素和另外一个集合的元素如何对应。 例如,列表是从下标到元素的映射
- 累加器(accumulator):在循环中用于加和或者累积某个结果的变量
- 增加赋值(augmented assignment):使用类似+=操作符来更新变量值的语句
- 化简(reduce):一种处理模式,便利一个序列,并将元素值累积起来计算为一个单独的结果
- 映射(map):一种处理模式,遍历一个序列,对每个元素进行操作
- 过滤(fliter):一种处理模式,便利列表,并选择满足某种条件的元素
- 对象(Object):变量可以引用的东西,对象有类型和值
- 相等(equivalent):拥有相同的值
- 相同(identical):是同一个对象
- 引用(reference):变量和它的值之间的关联
- 别名(aliasing):多个变量同时引用一个对象的情况
- 分隔符(delimiter):用于分割字符串的一个字符或字符串
Now or nerver .