Python:比较列表,执行操作,创建新列表

时间:2018-06-02 03:03:15

标签: python list

我目前正在研究python并遇到了一个我似乎无法找到解决方案的问题。我希望你们中的一些人可以帮助我。

问题如下:

我有三个列表,每个列表有3000个元素。每个清单的前五个要素如下:

A = [100, 101, 100, 99, 100...] B = [100, 102, 101, 98, 101...] C = [100, 103, 100, 99, 100...]

我需要使用以下规则创建一个名为D的新列表:

对于列表D的每个元素,我需要Python首先在列表A,B和C之间选择具有相同索引的最低值的列表。也就是说,要确定列表D的0eth元素是什么,Python首先需要在列表A,B和C之间选择具有该索引的最小元素的列表。每当有一个列表具有相同的索引的相同最小值时,Python需要在这些列表之间随机选择。

对于List D的0eth元素,因为所有三个引用列表都具有相同的0eth元素(即100),所以Python需要在三者之间随机选择。

假设Python随机选择列表B.然后,为了确定列表D的0eth元素,python将列表B的最后一个元素除以其0eth元素。让我们说列表B的最后一个元素是130.在这种情况下,列表D的0eth元素将是1.3。

继续,对于列表D的索引= 1个元素,Python将立即选择列表A,因为它具有最低的索引= 1个元素。然后,python将列表A的最后一个元素除以列表A的index = 1元素。假设它是145.在这种情况下,列表D的索引= 1个元素将是145/101 = 1.4356

最后,列表D也将有3000个元素。

有谁知道如何编码来解决这个问题?

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为downvotes是合理的,因为你没有提供任何代码来向我们展示你到目前为止所尝试的内容,因此我们知道你的代码在哪里。另外我认为你写这些要求的方式有点令人困惑(0可能有时候意味着nth?)。无论如何,这并不难做到 - 您只需要zipmin,列表理解和random.choice,您就可以使用n列表:

from random import choice

a = [100, 101, 100, 99, 100, 110]
b = [100, 102, 101, 98, 101, 130]
c = [100, 103, 100, 99, 100, 120]

# In order to work properly with indexes 
# we should rely on a list of lists
lists = [a, b, c]
# Collect the last value of each sublist in lists
last_values = [sublist[-1] for sublist in lists]
# Your d list
result = []

# zip combines each element from each given list on the same index
# splat the sublists with * (keeps the proper order of sublists)
for zipped in zip(*lists):
  # min selects the lowest value in the zipped values
  lowest = min(zipped)
  # find all occurences of the lowest value within zipped values
  indexes = [i for i, v in enumerate(zipped) if v == lowest]
  # pick a random index (len(indexes) doesn't matter)
  random_index = choice(indexes)
  # Divide the last value in the picked list with the lowest value
  value = last_values[random_index] / lowest
  # And add to result
  result.append(value)

print(result)