我有几次使用Python,我发现了"pythonic"编码方式.我在代码中使用了很多元组,其中大部分是极地或笛卡尔位置.
我发现自己在写这个:
window.set_pos([18,8])
Run Code Online (Sandbox Code Playgroud)
而不是这个:
window.set_pos((18,8))
Run Code Online (Sandbox Code Playgroud)
摆脱我发现难以阅读的双重括号.
似乎python自动进行从列表到元组的类型转换,因为我的代码正常工作.
但它是一种很好的编码方式吗?你有任何可用于编写可读代码的演示提示吗?
提前感谢你肯定有启发性的答案.
引用这个答案:
除了元组是不可变的之外,还有一个语义上的区别应该指导它们的使用.元组是异构数据结构(即,它们的条目具有不同的含义),而列表是同构序列.元组有结构,列表有顺序.
这对我来说很有意义.但是为什么Django使用元组而不是列表进行设置?例:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
)
Run Code Online (Sandbox Code Playgroud)
这个(以及所有其他设置)在语义上是不是一个完美的案例列表?
Python中的()vs [] vs {}之间有什么区别?
他们是收藏品?我怎么知道何时使用哪个?
是否可以将地图扩展为方法参数列表
在Python中,它是可能的,例如. 将元组扩展为参数
我有def map = ['a':1, 'b':2]
一个方法def m(a,b)
我想写像smt一样 m(*map)
我觉得这之前一定要问过(可能不止一次),所以可能提前道歉,但我无法在任何地方找到它(这里或通过谷歌).
无论如何,在解释Python中列表和元组之间的区别时,在元组不可变之后提到的第二件事是列表最适用于同类数据,而元组最适合异构数据.但似乎没有人想解释为什么会这样.那么为什么会这样呢?
我有一定数量的基础对象.
这些基础对象将被放入集合中,这些集合将被包围:排序,截断等.
不幸的是,n足够大,内存消耗略微令人担忧,速度越来越快.
我的理解是元组的内存效率略高,因为它们是经过重复数据删除的.
无论如何,我想知道Python 2.6/2.7中列表与元组的cpu /内存权衡是什么.
我已经知道Python中列表和元组之间的主要区别在于列表是可变的而元组则不是.除此之外,他们可以使用不同的方法,我对列表和元组知之甚少.它们之间还有其他区别吗?在Python 3的列表中使用元组是否有任何优点/缺点(除了不变性)?是否有一个比另一个更快的访问时间,或具有更小的内存大小,或包含更多的方法?他们的内部结构有何不同?或者是一个元组只是一个不可变的列表,仅此而已?
我试图计算可变大小数组的起源和偏移量,并将它们存储在字典中.这是我实现这一目标的非pythonic方式.我不确定我是否应该使用map,lambda函数或列表推导来使代码更加pythonic.
基本上,我需要根据总大小来剪切数组的块,并将xstart,ystart,x_number_of_rows_to_read,y_number_of_columns_to_read存储在字典中.总大小是可变的.我无法将整个数组加载到内存中并使用numpy索引或我肯定会.原点和偏移用于使数组变成numpy.
intervalx = xsize / xsegment #Get the size of the chunks
intervaly = ysize / ysegment #Get the size of the chunks
#Setup to segment the image storing the start values and key into a dictionary.
xstart = 0
ystart = 0
key = 0
d = defaultdict(list)
for y in xrange(0, ysize, intervaly):
if y + (intervaly * 2) < ysize:
numberofrows = intervaly
else:
numberofrows = ysize - y
for x in xrange(0, xsize, intervalx):
if …Run Code Online (Sandbox Code Playgroud) 我很清楚地知道,有列表和元组之间的差异和元组不只是不断名单,但有其中两个实际上是由区别对待的几个例子的代码(由编码约定反对),所以我(草率地)可以互换地使用它们.
然后我遇到了一个案例,他们给出了完全不同的行为:
>>> import numpy as np
>>> a = np.arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> idx = (1,1)
>>> a[idx]
4
>>> idx = [1,1]
>>> a[idx]
array([[3, 4, 5],
[3, 4, 5]])
Run Code Online (Sandbox Code Playgroud)
谁能解释这里发生了什么?更重要的是,这个陷阱还有什么地方出现在scipy中?
您可以__slots__使用列表或元组(或任何可迭代的?)在新型python类中进行定义。创建实例后,该类型仍然存在。
鉴于元组总是比列表更有效率并且是不变的,是否有任何理由不希望使用元组__slots__呢?
>>> class foo(object):
... __slots__ = ('a',)
...
>>> class foo2(object):
... __slots__ = ['a']
...
>>> foo().__slots__
('a',)
>>> foo2().__slots__
['a']
Run Code Online (Sandbox Code Playgroud) python ×8
tuples ×3
arrays ×2
list ×2
numpy ×2
arguments ×1
collections ×1
django ×1
groovy ×1
optimization ×1
python-2.6 ×1
python-2.7 ×1
python-3.x ×1
readability ×1
scipy ×1
semantics ×1