比较两个嵌套列表并基于嵌套值附加第三个列表

2024-04-27 03:47:09 发布

您现在位置:Python中文网/ 问答频道 /正文

嵌套列表A = [[1, 110, 150, 3], [5, 95, 155, 1], [4, 115, 195, 4], [2, 105, 205, 2]]。我试图给这些单独的列表中的每一个给出一个分数,它最初被计算为score = number of individual nested lists that have ( higher 3rd element value (3, 1, 4, 2) AND a presence in RanksList);其中Rankslist = []。你知道吗

因此,基本上需要在每个单独列表中添加一个元素,RanksList变成RanksList = [[1, 110, 150, 3, x], [5, 95, 155, 1, x], [4, 115, 195, 4, x], [2, 105, 205, 2, x]];其中x是每个单独列表的计算得分。到目前为止,这就是我所拥有的,我被困住了:

      m = 0
      n = 0
      i = 0
      #RanksList = []
      A = [[1, 110, 150, 3], [5, 95, 155, 1], [4, 115, 195, 4], [2, 105, 205, 2]]
      duplicate_list = A[:]
      for m in A:
            for n in duplicate_list:
                  if (n[i][3] < m[i][3]) and (n in RanksList):
                         RanksList.append(m)
            i = i + 1
      print(len(RanksList))
      print(RanksList)

我试图复制原始的list A,并将每个嵌套列表中的第三个元素分别与原始嵌套列表进行比较,以填充RanksList。我是Python的新手,在列表上仍然不稳定。我试着不用numpy做这件事。谢谢。你知道吗


Tags: ofin元素number列表for分数individual
1条回答
网友
1楼 · 发布于 2024-04-27 03:47:09

Pythonfor不需要索引变量。在for中,当前迭代的元素将在in之前的变量中可用。因此,要访问内部列表的第三个元素,您需要

for m in A:
    for n in A:
        if (n[3] > m[3]): # no i
            # (increase score for m if n in RankList)

最后,RankList中的每个条目都应有一个条目。但是如果我们从一开始就把它们填入RankList,你在分数计算中的条件就没有意义了,所以我猜这不是你想要的。但是,您必须在某个时候填写这些值,并且不能使这些值依赖于已经存在的值,否则这种情况永远不会发生。你知道吗

也许在我们处理完外部迭代之后,添加它的值就是您想要的:

RankList = []
for m in A:
    for n in A:
        if (n[3] > m[3]): # no i
            # (increase score for m if n in RankList)
    RankList.append(m)

哦,语法高亮显示认为RankList是一个类,因为它以大写字母开头,继续大小写混合。(python类的命名约定。不是由语言强制执行,只是一个约定。)让我们重命名它:

rank_list = []
for m in A:
    for n in A:
        if (n[3] > m[3]):
            # (increase score for m if n in rank_list)
    rank_list.append(m)

现在我们可以在以下条件下使用它:

rank_list = []
for m in A:
    for n in A:
        if (n[3] > m[3]) and (n in rank_list):
            # (increase score for m)
    rank_list.append(m)

您希望rank\u list中的列表将分数作为第5个元素(即在索引4)。你知道吗

rank_list = []
for m in A:
    score = 0
    for n in A:
        if (n[3] > m[3]) and (n in rank_list):
            score += 1
    rank_list.append(m + [score])

但是,等等,n in rank_list现在将始终为false,因为rank_list将包含不同的列表。让我们使用两个单独的列表,因此:

rank_list = []
already_scored = []
for m in A:
    score = 0
    for n in A:
        if (n[3] > m[3]) and (n in already_scored):
            score += 1
    rank_list.append(m + [score])
    already_scored.append(m)

相关问题 更多 >