这个问题来自https://leetcode.com/problems/find-players-with-zero-or-one-losses/。是否可以在此问题中使用列表理解来创建一个新列表,该列表中每个元组的第一项都不会出现在任何元组的第二项中。
例如:
matches = [[1,3],[2,3],[3,6],[5,6],[5,7],[4,5],[4,8],[4,9],[10,4],[10,9]]
我想要一份新的清单:
neverLost = [1, 2, 10]
我会列出两份清单,一份为问题的每一部分加上清单理解,然后把它们连在一起,以求解决问题。我试过使用列表理解,但我有语法问题
neverLost = [w for w, l in matches if w not l]
第一部分w表示w,l在匹配中很好,并将创建每个元组[1, 2, 3, 5, 5, 4, 4, 4, 10, 10]的第一个项目的列表,但是我很难理解表达式的语法和理解,以筛选“胜利者”。如果这是解决这个问题的好办法,请告诉我。我知道我可以用字典来做这件事,但我想知道这种方法是否也是可能的。谢谢!
发布于 2022-11-29 09:46:31
列表理解是有效的,但没有优化的方法来解决这些问题。
In [48]: list(set([j[0] for j in matches if j[0] not in [i[1] for i in matches]]))
Out[48]: [1, 2, 10]发布于 2022-11-29 09:51:09
你所做的
neverLost = [w for w, l in matches if w not l]将检查该元组中的第一项是否等于该元组中的第二项。它是而不是检查第一项是否在任何其他元组中位于第二位。
你可以用这个-
list(set([w[0] for w in matches if w[0] not in [l[1] for l in matches]]))发布于 2022-11-29 09:56:42
我觉得你应该做点什么,
matches = [[1, 3], [2, 3], [3, 6], [5, 6], [5, 7], [4, 5], [4, 8], [4, 9], [10, 4], [10, 9]]
losses_dict = {}
for (_, value) in matches:
losses_dict.setdefault(value, 0) # key might exist already
losses_dict[value] += 1
final_list = [
[k for k, _ in matches if k not in losses_dict.keys()],
[k for k, v in losses_dict.items() if v == 1]
]dict.setdefault检查该键是否已经存在,否则它会追加值0。
https://stackoverflow.com/questions/74611917
复制相似问题