我有点困惑的一块python的代码在使用dict:
>>> S = "ababcbacadefegdehijhklij"
>>> lindex = {c: i for i, c in enumerate(S)}
>>> lindex
{'a': 8, 'c': 7, 'b': 5, 'e': 15, 'd': 14, 'g': 13, 'f': 11, 'i': 22, 'h': 19, 'k': 20, 'j': 23, 'l': 21}
如何理解“{c:i代表枚举中的i,c}”?谁能给我解释一下吗?
归根结底,这将创建字符串中每个字符最后出现的字典。这里是如何...
第一个enumerate
返回一个iterable,其中的元素是索引和值的元组。
print(*enumerate(['a', 'b', 'c']))
(0, 'a') (1, 'b') (2, 'c')
因为S
是一个可迭代的字符串,所以枚举(S)返回对应于...
(0, 'a') (1, 'b') (2, 'a') (3, 'b') (4, 'c') ...
其次,此枚举
对象由字典理解使用,这是创建字典的一种简洁方法。
d = { x: x + 1 for x in range(3) }
{0: 1, 1: 2, 2: 3}
字典理解用于创建字典,其中键是字符串S
中的字母,项是字符的索引。
由于字典的键只能与单个值关联,因此只保留最后一个值,即字符出现的最后一个索引。
如果没有枚举
和字典理解,代码相当于。。。
S = "ababcbacadefegdehijhklij"
lindex = {}
for i in range(len(lindex)):
lindex[i] = S[i]
我将把这一行分成几行,这样更容易理解。以下代码与示例中的一行程序执行相同的操作:
S = "ababcbacadefegdehijhklij"
lindex = {}
for count, letter in enumerate(S):
lindex[letter] = count
print(lindex)
产出将是:
{0:a',1:b',2:a',3:b',4:c',5:b',6:a',7:c',8:a',9:d',10:e',11:f',12:e',13:g',14:d',15:e',16:h',17:i',18:j',19:h',20:k',21:l',22:i',23:j'
(重要的是要注意字典值是随机显示的,因为顺序无关紧要。)
enumerate所做的是遍历字符串中的每个字母,但同时输出字母和计数。因此,它将从count=0
,letter=“a”
,然后是count=1
,letter=“b”
等等开始。然后将这些值添加到字典中,lindex
,键为字母,值为计数。
然而,重要的是要注意,字典中只能有一个键,所以每次出现相同的字母时,它的字典值都会被替换。
问题内容: 这个问题已经在这里有了答案 : 10年前关闭。 复制: 在Python中实现“枚举”的最佳方法是什么? 在python中进行枚举的公认方法是什么? 例如,目前我正在编写游戏,希望能够将“上”,“下”,“左”和“右”移动。我使用字符串是因为我还没有弄清楚枚举在python中是如何工作的,所以我的逻辑充满了这样的东西: 我想用类似的东西代替 问题答案:
谁能解释一下 和 我经常使用前一个示例(可能太频繁了,没有足够的封装),但我从未使用过第二个示例。 谢啦 枚举
一些具有特殊含义的类,其实例化对象的个数往往是固定的,比如用一个类表示月份,则该类的实例对象最多有 12 个;再比如用一个类表示季节,则该类的实例化对象最多有 4 个。 针对这种特殊的类, Python 3.4 中新增加了 Enum 枚举类。也就是说,对于这些实例化对象个数固定的类,可以用枚举类来定义。 例如,下面程序演示了如何定义一个枚举类: 如果想将一个类定义为枚举类,只需要令其继承自 enu
问题内容: 我正在用Java编写游戏,该游戏由一排瓷砖组成。我将无法以独创性方式定义图块的边缘以及它们之间的相互关系,例如,要获得图块的相对边缘,我希望能够输入。但是,当使用枚举定义这些边时,我最终不得不在构造函数中转发至少其中两个引用: 有没有什么办法可以使用枚举来解决这个问题呢? 问题答案: 您可以这样做不是那么直观。
为什么我在浏览java时看不到
问题内容: 当我使用DataContractJsonSerializer序列化枚举值时,它将序列化枚举的数值,而不是字符串名称。 IE浏览器: 序列化foo.bar的值将返回“ 0”,而不是“ bar”。 我更喜欢它,是否有一种方法可以覆盖它? 编辑: 因为我不想更改序列化程序,所以我使用了一个简单的变通办法。 我在类中公开了要序列化的属性,该属性在值上调用ToString,即: 问题答案: 看起