Ich brauche die Werte in l1 um einige Prozent „Crush“ zu tun ist, so dass sie näher zusammen sind, so dass vielleicht, wenn ein Array l1 waren ...Bringen Sie alle Werte in einem Array näher zusammen
l1 =[10,20,30,40,50,60,70,80,90,100]
Dann l2 könnte ...
l2 = [12.5, 25.0, 37.5, 50.0, 62.5, 45.0, 52.5, 60.0, 67.5, 75.0]
, die auf einem einfachen Skript getan werden kann, wie zum Beispiel ...
for i in l1:
if i <= 50:
i = (i*1.25)
l2.append(i)
print(i)
elif i >= 50:
i = (i*0.75)
l2.append(i)
print (l2)
Das bedeutet also, dass ich alle Elemente näher zusammen bringen muss - idealerweise um einige Prozent (gedruckt). Das Problem tritt auf, wenn Sie eine Liste wie diese haben ...
l1 =[4,2,3,4,3,6,4,8.6,10,7,12,4,14,15,26,14,15,16,10]
Was muß ich dann alle Einzelteile zusammen diskret tut, ist zu bringen (so um einige Prozent), aber in einer Schleife. Ich muss die Werte des Arrays "verdichten" oder "zerquetschen", den Bereich zwischen jeder Zahl vom kleinsten zum größten und größten zum kleinsten (näher zum Median) verringern. Ich kann nicht einfach durch die ganze Liste dividieren, da die Bereiche gleich bleiben.
Ich dachte, eine Möglichkeit, dies zu erreichen (woran ich gerade arbeite) wäre, (a) den Median von l1 zu finden, (b) vom kleinsten und größten Element in l1 zu beginnen, dieses Element um 10 zu erhöhen % des Wertes oder verringern Sie ihn um 10% seines Wertes (im Fall des größten Elements), dann arbeiten Sie mit dem zweitkleinsten und größten Element in der gleichen Schleife (um zu vermeiden, dass das Skript zweimal dieselbe 'kleinere Variable' durchläuft)).
Dies würde bedeuten, die Werte vom größten zum kleinsten aufzulisten, während ihre Positionen im Array beibehalten werden (was wichtig ist), dann durch diese Liste zu suchen und die Änderungen für jeden entsprechenden Wert zum Array l1 vorzunehmen.
Für die Aufmerksamkeit der vorgeschlagenen Lösung ... Eine Wiederholung von ...
import statistics
a = [4, 3, 3, 4, 5, 1, 31, 321]
input_scope = 1.1
def scouter (input_list, scope):
mean = statistics.mean(input_list)
searchpositions = []
for x, i in enumerate(input_list):
print (x, i)
if i == max(input_list) or i == min(input_list):
searchpositions.append(x)
for i in searchpositions:
input_list[i] = [(input_list[i] - mean)/scope + mean]
return (input_list)
print(scouter((a), input_scope))
mir gibt, was ich brauche, irgendwie ...
[4, 3, 3, 4, 5, [5.13636363636364], 31, [296.0454545454545]]
Output ist Listen in Listen ! Gibt es eine einfache Möglichkeit, dies zu beseitigen, indem Sie die Funktion neu schreiben?
Ich verstehe nicht, wie Sie 'l2' von' l1' oben berechnen. Zum Beispiel, warum bleibt '2'' 2'? – pts
Sie können eine Antwort leichter erhalten, wenn Sie klären, welche Eigenschaften eine gute Lösung haben muss. Zum Beispiel, was ist los mit dieser einfacheren Lösung: 'l2 = [x * 0.01 für x in l1]'? – pts
Wenn Ihre Anwendung einen Fehler aufweist, können Sie den Fehler beheben, anstatt zu versuchen, die Eingabewerte zu umgehen. – pts