我对使用dict的一段python代码有些困惑:
>>> 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 for i,c in enumerate(S)}”?有人可以给我一些解释吗?
答案 0 :(得分:1)
最下面的一行将创建一个字典,该字典包含字符串中每个字符的最后一次出现。这是...
enumerate
第一个enumerate
返回一个可迭代的元素,这些元素是索引和值的元组。
print(*enumerate(['a', 'b', 'c']))
(0, 'a') (1, 'b') (2, 'c')
由于S
是一个可迭代的字符串,因此enumerate(S)
返回与...对应的迭代器。
(0, 'a') (1, 'b') (2, 'a') (3, 'b') (4, 'c') ...
第二,dictionary-comprehension使用了这个enumerate
对象,这是创建字典的简洁方法。
d = { x: x + 1 for x in range(3) }
{0: 1, 1: 2, 2: 3}
dictionary-comprehension用于创建字典,其中的键是字符串S
中的字母,项目是字符的索引。
由于字典的键只能与一个值相关联,因此仅保留最后一个值,即字符出现的最后一个索引。
没有enumerate
和字典理解,代码等效于...
S = "ababcbacadefegdehijhklij"
lindex = {}
for i in range(len(lindex)):
lindex[i] = S[i]
答案 1 :(得分:1)
我将把一行分成几行,以便于理解。以下代码与您的示例中的一个衬纸具有相同的作用:
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'}
(由于顺序无关紧要,随机显示重要的词典值)
枚举的作用是遍历字符串中的每个字母,但同时输出字母和计数。因此,它将以count = 0
,letter = "a"
开始,然后是count = 1
,letter = "b"
,依此类推。然后将这些值添加到字典lindex
中,其中的键是字母,值是计数。
但是,重要的是要注意,字典中只能有一个键,因此,每次出现相同的字母时,都会替换其字典值。