Vorrei impacchettare tutti i dati in un elenco in un buffer singolo da inviare tramite un socket UDP. L'elenco è relativamente lungo, quindi l'indicizzazione di ciascun elemento nell'elenco è noiosa. Questo è quello che ho finora:Python struct.pack() per i singoli elementi in una lista?
NumElements = len(data)
buf = struct.pack('d'*NumElements,data[0],data[1],data[2],data[3],data[4])
Ma mi piacerebbe fare qualcosa di più divinatorio che non richiede cambio la chiamata se ho aggiunto più elementi alla lista ... qualcosa come:
NumElements = len(data)
buf = struct.pack('d'*NumElements,data) # Returns error
C'è un buon modo per farlo ??
Ah questo è solo quello che mi serviva! Grazie! – user1636547
''d' * NumElements' non è una buona pratica, potrebbe finire per fare una stringa molto grande, solo per perdere tempo a cercare, solo per liberare in seguito. Includere invece il numero direttamente nella stringa: 'buf = struct.pack (" {0: d} d ".format (NumElements), * data)' – ideasman42
@ ideasman42: buon punto. Ma con un numero enorme di valori, scompattarli in 500000 argomenti potrebbe essere un problema tanto quanto passare 'd' * 500000, quindi potresti voler testarlo contro 'b ''. Join (struct.pack ('d' , elem) per elem in data) ', o considera l'uso di qualcosa come' array' o 'ctypes' invece di' struct'. – abarnert