簡體   English   中英

查找列表中大於當前元素的所有元素

[英]Finding all elements greater than current element in a list

如果我在 Python 中有一個數組,其中所有元素都有不同的值,例如[1,4,6,2,10,3,5] ,有沒有辦法找到列表中的值的總數大於當前指數?

因此,例如,使用上面長度為 7 的列表,我想要得到的結果是另一個長度為 7 的列表,它看起來像[6,3,1,5,0,4,2] 我在嘗試遍歷列表時遇到了麻煩(我嘗試使用的代碼如下)

for i in data:
    count = np.sum(data > data[i])
    N[i]=count

其中data是包含所有相關值的數組, N是與 data 長度相同的np.zeros列表

這是我的建議:

我們對原始列表 (l) 進行排序,並將其保存在新列表 m 中。 我們創建一個新列表 (k),在其中保存在 m 中每個元素的 position 右側找到的元素計數。 見下文:

l=[1,4,6,2,10,3,5]

m=sorted(l)
#[1, 2, 3, 4, 5, 6, 10]

k=[]
for i in l:
    k.append(len(m)-m.index(i)-1)

>>> print(k)

[6, 3, 1, 5, 0, 4, 2]

你非常親近。 for i in data遍歷每個元素,而不是 Java/C 中的索引。

使用range(len(data))代替。

import numpy as np

data = np.array([1,4,6,2,10,3,5])
out = np.array([0]*7)

for i in range(len(data)):
    count = np.sum(data > data[i])
    out[i] = count

print(out)  # [6 3 1 5 0 4 2]

編寫循環的另一種方法是使用enumerate() ,它返回一對(索引,元素)的迭代器。

for i, x in enumerate(data):
    count = np.sum(data > x)
    out[i] = count

像這樣的東西?

list = [1,4,6,2,10,3,5]
list2 = []
v = len(list)
for x in list:
    if x > v:
        pass
    else:
        list2.append(x)

print(list2)

EDIT ¯\_(ツ)_/¯ (查看大於當前元素的元素總數)

list = [1,4,6,2,10,3,5]
list2 = []
v = len(list)
total = 0

for x in list:
    if x > v:
        pass
    else:
        list2.append(x)

for y in list2:
    total += 1

list2 = str(list2).replace('[', '')
list2 = list2.replace(']', '')

print("Now - " + list2 + ", in total of " + str(total) + " numbers ;)")

Output -

Now - 1, 4, 6, 2, 3, 5, in total of 6 numbers ;)

或者,您可以通過使用vectorize來做到這一點,如下所示:

>>> data = np.array( [1,4,6,2,10,3,5] )
>>> np.vectorize(lambda a, b : np.sum(a>b), excluded = [0] )(data, data)
array([6, 3, 1, 5, 0, 4, 2])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM