在Python中,何时应该使用列表和何时使用元组?
有时你没有选择权,例如你有
"hello %s you are %s years old" % x
Run Code Online (Sandbox Code Playgroud)
然后x必须是一个元组.
但如果我是设计API并选择数据类型的人,那么指导原则是什么?
我想从字符串中读取一些字符并将其放入其他字符串中(就像我们在C中所做的那样).
所以我的代码如下所示
import string
import re
str = "Hello World"
j = 0
srr = ""
for i in str:
srr[j] = i #'str' object does not support item assignment
j = j + 1
print (srr)
Run Code Online (Sandbox Code Playgroud)
在C中代码可能是
i = j = 0;
while(str[i] != '\0')
{
srr[j++] = str [i++];
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Python中实现相同的功能?
关于什么可以/不能用作python dict的键,我有点困惑.
dicked = {}
dicked[None] = 'foo' # None ok
dicked[(1,3)] = 'baz' # tuple ok
import sys
dicked[sys] = 'bar' # wow, even a module is ok !
dicked[(1,[3])] = 'qux' # oops, not allowed
Run Code Online (Sandbox Code Playgroud)
所以一个元组是一个不可变的类型,但是如果我在其中隐藏一个列表,那么它就不能成为一个键......难道我不能轻易地隐藏模块中的列表吗?
我有一个模糊的想法,关键是必须"可以",但我只是承认自己对技术细节的无知; 我不知道这里到底发生了什么.如果您尝试使用列表作为键,将哈希作为其内存位置,会出现什么问题?
我喜欢Python的原因之一是由元组,列表,集合和字典提供的表达能力/减少编程工作.一旦你理解了列表理解和一些使用IN和FOR的基本模式,生活就会变得更好!Python摇滚.
但是我确实想知道为什么这些结构会被视为不同,以及随着时间的推移它会如何变化(变得陌生).回到Python 2.x,我本可以提出一个论点,它们只是基本集合类型的变体,并且有些令人恼火的是,一些非常外用例需要您将字典转换为列表并再次返回.(字典不仅仅是具有特定唯一性约束的元组列表吗?列表不是仅具有不同类型的唯一性约束的集合吗?).
现在在3.x世界中,它变得更加复杂.现在有名为元组 - 开始感觉更像是一个特例字典.现在有订单的词典 - 开始感觉更像是一个列表.我刚看到有序套装的配方.我可以想象一下这个......还有什么独特的清单等等.
Python的禅宗说"应该有一个 - 最好只有一个 - 明显的方式".在我看来,这种专门的集合类型的大量与这个Python规则相冲突.
硬核Pythonistas的想法是什么?
我是Python的新手,我想知道我是否可以构建具有复杂结构的枚举,而不仅仅是原始类型.例如(在伪代码中):
Point::Enum
x, y
constructor ( x, y ) {
...
}
bottom_left = Point ( 0, 0 )
top_left = Point ( 0, 100 )
top_right = Point ( 100, 100 )
bottom_right = Point ( 100, 0 )
Run Code Online (Sandbox Code Playgroud)
到目前为止,我只能找到提到字符串或整数的枚举的Python文档.
我正在学习Python,并且具有Ruby的背景知识。从来没有元组,我无法想象为什么我会需要它们,或者为什么Python如此依赖它们。
我在谷歌上搜索并知道 Tensorflow 的constant()函数会生成一个恒定的张量(大惊喜!)并且无法修改。
但是当我这样做时:
>>> a = tf.constant(0.0)
>>> a = a + 1.0
Run Code Online (Sandbox Code Playgroud)
我没有看到 Tensorflow 产生的任何错误。
我明白了原因,a现在是一个新的张量操作Add(<tf.Tensor 'add_1:0' shape=() dtype=float32>)。
我的问题是,constant如果我们可以修改它,Tensorflow有什么用?它与图形优化有什么关系吗?我在这里错过了一些微不足道的东西吗?
提前致谢。
python ×7
tuples ×3
list ×2
collections ×1
complextype ×1
dictionary ×1
enums ×1
hashable ×1
ruby ×1
string ×1
tensorflow ×1
types ×1