Je suis très nouveau sur python, j'ai un ensemble de données dans une liste qui produira ce qui suit:

[(['S1'], 123.6, 4, -3.09710082168993), (['S2'], 189.6, 4, -3.09710082168993)]
[(['S1'], 123.6, 4, -1974.1075190129), (['S2'], 189.6, 4, -1974.1075190129)]

J'obtiens cette sortie par ces codes:

plateX = g_o.getresults(phase, g_o.ResultTypes.NodeToNodeAnchor.X, 'node') 
plateY = g_o.getresults(phase, g_o.ResultTypes.NodeToNodeAnchor.Y, 'node') 
plateM = g_o.getresults(phase, g_o.ResultTypes.NodeToNodeAnchor.AnchorForce2D, 'node')
layer = (
['S1'],
['S2'],    
['S3'],
['S4'],
['S5'],
['S6'],)

result = zip(layer, plateX, plateY, plateM)
test1 = list(result)
print(test1)

Comment dois-je arrondir le résultat mais garder le "S1", "S2" comme indicateur du résultat?
Merci pour l'aide.

E.g.
[(['S1'], 123.6, 4, -3.09710082168993), (['S2'], 189.6, 4, -3.09710082168993)]
to
[(['S1'], 123.6, 4, -3.1), (['S2'], 189.6, 4, -3.1)]

C'est ce que je voulais réaliser.

0
KLo 16 avril 2018 à 09:12

3 réponses

Meilleure réponse

Vous pouvez les arrondir en place en utilisant le générateur

result = zip(layer, plateX, plateY, (round(x, 2) for x in plateM))

Économise de la mémoire et du travail pour l'interprète

0
Ramkishore M 16 avril 2018 à 06:39

Convertissez le tuple en liste, puis arrondissez l'élément.

d = [(['S1'], 123.6, 4, -3.09710082168993), (['S2'], 189.6, 4, -3.09710082168993)]
d = list(map(list, d))              #Convert to list.
for i in d:
    i[-1] = round(i[-1], 2)      #round value.
d = list(map(tuple, d))             #Convert to tuple.
print(d)

Sortie:

[(['S1'], 123.6, 4, -3.1), (['S2'], 189.6, 4, -3.1)]
0
Rakesh 16 avril 2018 à 07:34

Modifiez cette ligne:

result = zip(layer, plateX, plateY, round(plateM, 2))

Vous pouvez utiliser la fonction round, qui prend comme premier argument le nombre et le second argument est la précision.

0
ANKUR KHUNT 16 avril 2018 à 06:18