python 嵌套循环中的列表理解
List comprehensions in python nested loops
scrabble_scores = [(1, "EAOINRTLSU"), (2, "DG"), (3, "BCMP"),
(4, "FHVWY"), (5, "K"), (8, "JX"), (10, "QZ")]
def get_scrabble_scorer():
print {x:y for x,z in scrabble_scores for y in z}
pass
get_scrabble_scorer()
我期望输出:
[1:'E',1:'A,1:'O',1:'I'....]
这样分数将被映射到单词中的每个字母表
但我得到了输出:
{1: 'U', 2: 'G', 3: 'P', 4: 'Y', 5: 'K', 8: 'X', 10: 'Z'}
帮帮我
您的列表理解逻辑很好。您可以通过更改
来验证这一点
print {x:y for x,z in scrabble_scores for y in z}
至
print [(x,y) for x,z in scrabble_scores for y in z]
打印出
[(1, 'E'), (1, 'A'), (1, 'O'), (1, 'I'), (1, 'N'), (1, 'R'), (1, 'T'), (1, 'L'), (1, 'S'), (1, 'U'), (2, 'D'), (2, 'G'), (3, 'B'), (3, 'C'), (3, 'M'), (3, 'P'), (4, 'F'), (4, 'H'), (4, 'V'), (4, 'W'), (4, 'Y'), (5, 'K'), (8, 'J'), (8, 'X'), (10, 'Q'), (10, 'Z')]
你的实现不起作用的原因是字典的每个键都必须是唯一的。因此,当您设置 1:A
时,先前的 key:value
对 1:E
将被覆盖。
也许您正在寻找这封信作为钥匙?如果是这样,那么只需交换 x 和 y:
print {y:x for x,z in scrabble_scores for y in z}
如果您不坚持键是数字,请使用:
>>> {y:x for x,z in scrabble_scores for y in z}
{'E': 1, 'M': 3, 'F': 4, 'Z': 10, 'G': 2, 'Q': 10, 'U': 1, 'R': 1, 'I': 1, 'C': 3, 'A': 1, 'K': 5, 'Y': 4, 'L': 1, 'B': 3, 'O': 1, 'D': 2, 'T': 1, 'W': 4, 'S': 1, 'X': 8, 'P': 3, 'H': 4, 'J': 8, 'V': 4, 'N': 1}
你可以用它来计算一个词的分数:
>>> score_mapping = {y:x for x,z in scrabble_scores for y in z}
>>> word = 'Hello'
>>> sum(score_mapping[letter.upper()] for letter in word)
8
您需要切换字典,所以键是字母,值是分数。 Python 中的字典不能有重复键。
这也是计算单词得分的方法,通过查找每个字母(而不是查找每个数字)。
>>> {letter:score for score,letters in scrabble_scores for letter in letters}
{'A': 1, 'C': 3, 'B': 3, 'E': 1, 'D': 2, 'G': 2, 'F': 4, 'I': 1, 'H': 4, 'K': 5,
'J': 8, 'M': 3, 'L': 1, 'O': 1, 'N': 1, 'Q': 10, 'P': 3, 'S': 1, 'R': 1, 'U': 1
, 'T': 1, 'W': 4, 'V': 4, 'Y': 4, 'X': 8, 'Z': 10}
以下是您将如何使用上述映射:
>>> word = 'hello'
>>> score = sum(lookup.get(i.upper(),0) for i in word)
>>> score
8
您可以将带有打印命令的行更改为:
print [{x:y} for x,z in scrabble_scores for y in z]
那么输出将是:
[{1: 'E'}, {1: 'A'}, {1: 'O'}, {1: 'I'}...
scrabble_scores = [(1, "EAOINRTLSU"), (2, "DG"), (3, "BCMP"),
(4, "FHVWY"), (5, "K"), (8, "JX"), (10, "QZ")]
def get_scrabble_scorer():
print {x:y for x,z in scrabble_scores for y in z}
pass
get_scrabble_scorer()
我期望输出:
[1:'E',1:'A,1:'O',1:'I'....]
这样分数将被映射到单词中的每个字母表
但我得到了输出:
{1: 'U', 2: 'G', 3: 'P', 4: 'Y', 5: 'K', 8: 'X', 10: 'Z'}
帮帮我
您的列表理解逻辑很好。您可以通过更改
来验证这一点print {x:y for x,z in scrabble_scores for y in z}
至
print [(x,y) for x,z in scrabble_scores for y in z]
打印出
[(1, 'E'), (1, 'A'), (1, 'O'), (1, 'I'), (1, 'N'), (1, 'R'), (1, 'T'), (1, 'L'), (1, 'S'), (1, 'U'), (2, 'D'), (2, 'G'), (3, 'B'), (3, 'C'), (3, 'M'), (3, 'P'), (4, 'F'), (4, 'H'), (4, 'V'), (4, 'W'), (4, 'Y'), (5, 'K'), (8, 'J'), (8, 'X'), (10, 'Q'), (10, 'Z')]
你的实现不起作用的原因是字典的每个键都必须是唯一的。因此,当您设置 1:A
时,先前的 key:value
对 1:E
将被覆盖。
也许您正在寻找这封信作为钥匙?如果是这样,那么只需交换 x 和 y:
print {y:x for x,z in scrabble_scores for y in z}
如果您不坚持键是数字,请使用:
>>> {y:x for x,z in scrabble_scores for y in z}
{'E': 1, 'M': 3, 'F': 4, 'Z': 10, 'G': 2, 'Q': 10, 'U': 1, 'R': 1, 'I': 1, 'C': 3, 'A': 1, 'K': 5, 'Y': 4, 'L': 1, 'B': 3, 'O': 1, 'D': 2, 'T': 1, 'W': 4, 'S': 1, 'X': 8, 'P': 3, 'H': 4, 'J': 8, 'V': 4, 'N': 1}
你可以用它来计算一个词的分数:
>>> score_mapping = {y:x for x,z in scrabble_scores for y in z}
>>> word = 'Hello'
>>> sum(score_mapping[letter.upper()] for letter in word)
8
您需要切换字典,所以键是字母,值是分数。 Python 中的字典不能有重复键。
这也是计算单词得分的方法,通过查找每个字母(而不是查找每个数字)。
>>> {letter:score for score,letters in scrabble_scores for letter in letters}
{'A': 1, 'C': 3, 'B': 3, 'E': 1, 'D': 2, 'G': 2, 'F': 4, 'I': 1, 'H': 4, 'K': 5,
'J': 8, 'M': 3, 'L': 1, 'O': 1, 'N': 1, 'Q': 10, 'P': 3, 'S': 1, 'R': 1, 'U': 1
, 'T': 1, 'W': 4, 'V': 4, 'Y': 4, 'X': 8, 'Z': 10}
以下是您将如何使用上述映射:
>>> word = 'hello'
>>> score = sum(lookup.get(i.upper(),0) for i in word)
>>> score
8
您可以将带有打印命令的行更改为:
print [{x:y} for x,z in scrabble_scores for y in z]
那么输出将是:
[{1: 'E'}, {1: 'A'}, {1: 'O'}, {1: 'I'}...