我目前正在研究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个元素。
有谁知道如何编码来解决这个问题?
谢谢。
答案 0 :(得分:0)
我认为downvotes是合理的,因为你没有提供任何代码来向我们展示你到目前为止所尝试的内容,因此我们知道你的代码在哪里。另外我认为你写这些要求的方式有点令人困惑(0可能有时候意味着nth?)。无论如何,这并不难做到 - 您只需要zip
,min
,列表理解和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)