<div class="content-detail markdown-body">
<div class="show-content-free">
<hr>
<p><a href="https://www.jianshu.com/p/04d180d90a3f">第1章 准备工作</a><br><a href="https://www.jianshu.com/p/fc93e943e94a">第2章 Python语法基础,IPython和Jupyter</a><br> 第3章 Python的数据结构、函数和文件<br><a href="https://www.jianshu.com/p/a380222a3292">第4章 NumPy基础:数组和矢量计算</a><br><a href="https://www.jianshu.com/p/161364dd0acf">第5章 pandas入门</a><br><a href="https://www.jianshu.com/p/047d8c1c7e14">第6章 数据加载、存储与文件格式</a><br><a href="https://www.jianshu.com/p/ac7bec000dad">第7章 数据清洗和准备</a><br><a href="https://www.jianshu.com/p/cfc035bae567">第8章 数据规整:聚合、合并和重塑</a><br><a href="https://www.jianshu.com/p/7a0eafdd1340">第9章 绘图和可视化</a><br><a href="https://www.jianshu.com/p/b94deb5c7eb1">第10章 数据聚合与分组运算</a><br><a href="https://www.jianshu.com/p/29ece4592178">第11章 时间序列</a><br><a href="https://www.jianshu.com/p/9d093ebcc5d8">第12章 pandas高级应用</a><br><a href="https://www.jianshu.com/p/e46a1ac36aa5">第13章 Python建模库介绍</a><br><a href="https://www.jianshu.com/p/72b6c83bb69e">第14章 数据分析案例</a><br><a href="https://www.jianshu.com/p/3c3f7da88516">附录A NumPy高级应用</a><br><a href="https://www.jianshu.com/p/fb6719a18cea">附录B 更多关于IPython的内容(完)</a></p>
<hr>
<p>本章讨论Python的内置功能,这些功能本书会用到很多。虽然扩展库,比如pandas和Numpy,使处理大数据集很方便,但它们是和Python的内置数据处理工具一同使用的。</p>
<p>我们会从Python最基础的数据结构开始:元组、列表、字典和集合。然后会讨论创建你自己的、可重复使用的Python函数。最后,会学习Python的文件对象,以及如何与本地硬盘交互。</p>
<h1>3.1 数据结构和序列</h1>
<p>Python的数据结构简单而强大。通晓它们才能成为熟练的Python程序员。</p>
<h2>元组</h2>
<p>元组是一个固定长度,不可改变的Python序列对象。创建元组的最简单方式,是用逗号分隔一列值:</p>
<pre class="blockcode"><code class="python">In [1]: tup = 4, 5, 6
In [2]: tup
Out[2]: (4, 5, 6)
</code></pre>
<p>当用复杂的表达式定义元组,最好将值放到圆括号内,如下所示:</p>
<pre class="blockcode"><code class="python">In [3]: nested_tup = (4, 5, 6), (7, 8)
In [4]: nested_tup
Out[4]: ((4, 5, 6), (7, 8))
</code></pre>
<p>用<code>tuple</code>可以将任意序列或迭代器转换成元组:</p>
<pre class="blockcode"><code class="python">In [5]: tuple([4, 0, 2])
Out[5]: (4, 0, 2)
In [6]: tup = tuple('string')
In [7]: tup
Out[7]: ('s', 't', 'r', 'i', 'n', 'g')
</code></pre>
<p>可以用方括号访问元组中的元素。和C、C++、JAVA等语言一样,序列是从0开始的:</p>
<pre class="blockcode"><code class="python">In [8]: tup[0]
Out[8]: 's'
</code></pre>
<p>元组中存储的对象可能是可变对象。一旦创建了元组,元组中的对象就不能修改了:</p>
<pre class="blockcode"><code class="python">In [9]: tup = tuple(['foo', [1, 2], True])
In [10]: tup[2] = False
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-10-c7308343b841> in <module>()
----> 1 tup[2] = False
TypeError: 'tuple' object does not support item assignment
</code></pre>
<p>如果元组中的某个对象是可变的,比如列表,可以在原位进行修改:</p>
<pre class="blockcode"><code class="python">In [11]: tup[1].append(3)
In [12]: tup
Out[12]: ('foo', [1, 2, 3], True)
</code></pre>
<p>可以用加号运算符将元组串联起来:</p>
<pre class="blockcode"><code class="python">In [13]: (4, None, 'foo') + (6, 0) + ('bar',)
Out[13]: (4, None, 'foo', 6, 0, 'bar')
</code></pre>
<p>元组乘以一个整数,像列表一样,会将几个元组的复制串联起来:</p>
<pre class="blockcode"><code class="python">In [14]: ('foo', 'bar') * 4
Out[14]: ('foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar')
</code></pre>
<p>对象本身并没有被复制,只是引用了它。</p>
<h2>拆分元组</h2>
<p>如果你想将元组赋值给类似元组的变量,Python会试图拆分等号右边的值:</p>
<pre class="blockcode"><code class="python">In [15]: tup = (4, 5, 6)
In [16]: a, b, c = tup
In [17]: b
Out[17]: 5
</code></pre>
<p>即使含有元组的元组也会被拆分:</p>
<pre class="blockcode"><code class="python">In [18]: tup = 4, 5, (6, 7)
In [19]: a, b, (c, d) = tup
In [20]: d
Out[20]: 7
</code></pre>
<p>使用这个功能,你可以很容易地替换变量 |
|