J'ai une liste que chaque élément représente une chaîne d'informations de message:

rawdata = 
['1 1474585  1    19                                3', 
 '2 1474585  1    19                                2', 
 '3 1474585  1    27                                2', 
 '4 1474585  1    27                                2']

Les informations décrivent les éléments suivants: [CAN MessageID DLC Data Time]
Afin d'accéder et d'analyser les informations, j'essaie de diviser la liste et de la transformer en un tableau numérique. J'ai essayé d'utiliser split:

longstring = str.split(str(rawdata))

Mais cela divise simplement la liste en une longue chaîne:

longstring=
["['1", '1474585', '1', '19', "3',", "'
    2",  '1474585', '1', '19', "2',", "'
    3", '1474585', '1', '27', "2',
  "'4", '1474585', '1', '27', "2',",]"]

Ce que j'essaie de réaliser, c'est l'option d'appeler tous les messages en écrivant:

mydreamarray[:][0] = [1,2,3,4]
mydreamarray[:][1] = [1474585,1474585,1474585,1474585]
mydreamarray[:][2] = [1,1,1,1]
mydreamarray[:][3] = [19,19,27,27]
mydreamarray[:][-1] = [3,2,2,2]

Veuillez aider

-1
Woolfy 20 nov. 2018 à 15:51

3 réponses

Meilleure réponse

Vous pouvez créer un numpy.array

import numpy as np
newarray = np.array([[int(i) for i in j.split()] for j in rawdata])

Alors par exemple

>>> newarray
array([[      1, 1474585,       1,      19,       3],
       [      2, 1474585,       1,      19,       2],
       [      3, 1474585,       1,      27,       2],
       [      4, 1474585,       1,      27,       2]])
>>> newarray[:,0]
array([1, 2, 3, 4])
>>> newarray[:,1]
array([1474585, 1474585, 1474585, 1474585])
0
CoryKramer 20 nov. 2018 à 12:57

Utilisation de zip avec list-comprehension. zip(*[..]) transposera les données.

l = list(zip(*[map(int,i.split()) for i in rawdata]))
print (l)

Production:

[(1, 2, 3, 4),
 (1474585, 1474585, 1474585, 1474585),
 (1, 1, 1, 1),
 (19, 19, 27, 27),
 (3, 2, 2, 2)]

l[1]
#(1474585, 1474585, 1474585, 1474585)
2
Transhuman 20 nov. 2018 à 13:06

Vous devriez vraiment travailler par vous-même. Voilà comment vous apprenez. On a rien sans rien. Demander à d'autres personnes de faire votre travail pour vous ne vous apprendra rien.

Cela peut aider

Comment configurer un mydreamarray vide? Les tableaux Python commencent à zéro, vous ne pouvez donc pas avoir d'élément -1. Cependant, vous pouvez utiliser un dict. Un dict peut avoir n'importe quel entier ou chaîne comme clé. Alors,

mydreamdict={}
mydreamdict[-1] = []  # etc

Ou il serait peut-être préférable de renoncer à utiliser -1 et d'utiliser 4 à la place?

Pour ajouter à une liste, vous utilisez sa méthode .append()

rawdata est une liste de lignes brutes, et vous voulez faire quelque chose avec chacune d'elles, en ajoutant les champs de données aux listes vides dans mydreamdict. Alors

for row in rawdata:
    fields = split( row )
    mydreamdict[0].append( ... something out of fields  )
    #... more code needed

Champs est une liste de chaînes. Vous souhaitez convertir la chaîne en entier avant de la stocker. La fonction int() intégrée fait cela.

0
nigel222 20 nov. 2018 à 13:14