W Pythonie 3 próbuję utworzyć elementy array, gdzie każdy element składa się z dwóch wartości. Te wartości nie są tak naprawdę key-value pary, ponieważ są one równo związane ze sobą, co oznacza value 1 może być key dla value dwa, tak jak value Dwa mogą być key do value jeden, więc nie myślałem, że dictionary był właściwy.

my_list = [ (VALUE1, OFFSET1), (VALUE2, OFFSET2) ]

def printList(list):
    for item in list:
        print(item)

Jak mogę zbierać VALUE i OFFSET "values" oddzielnie? Jak na przykład

theValue  = list[0].VALUE
theOffset = list[0].OFFSET

Myślę, że może być może array struktur?

3
John 41_ 24 czerwiec 2017, 05:48

6 odpowiedzi

Najlepsza odpowiedź
def printList(my_list):
    for item in my_list:
        print('Value ', item[0])
        print('Offset ', item[1])

Pętla do pętli przez my_list. Każdy element w pętli jest odbierany jako krotka jak (VALUE, OFFSET) w elemencie zmiennej. Więc item[0] VALUE i item[1] OFFSET. I drukujemy go.

2
Arun 24 czerwiec 2017, 03:03

Myślę, że namedtuple może ci pomóc.

from collections import namedtuple

Element = namedtuple("Element", ["value", "offset"])

element_list = []

for value, offset in my_list:

    element_list.append(Element(value, offset))

for element in element_list:

    print element.value, element.offset

Jeśli chcesz uzyskać wszystkie wartości i przesunięcia oddzielnie, możesz użyć numpy, aby przekształcić my_list do numpy.array, która jest tablicą 2D.

import numpy as np

2d_array = np.array(my_list)

values = 2d_array[:, 0]
offsets = 2d_array[:, 1]
0
stamaimer 24 czerwiec 2017, 03:22

Spróbuj użyć a Lista Rozumienie

theValue  = [value[0] for value in my_list] 
theOffset = [offset[0] for value in offset]
0
AlbertB 24 czerwiec 2017, 03:00

Ponieważ masz list tuples, zamiast:

theValue  = list[0].VALUE
theOffset = list[0].OFFSET

Możesz użyć:

theValue = list[0][0]
theOffset = list[0][1]

Więc w twoim for-loop:

def printList(list):
    for item in list:
        print('VALUE: {}'.format(item[0]))
        print('OFFSET: {}'.format(item[1]))

Jeśli chcesz uzyskać wszystkie wartości w list i przesunięcia w osobnym list, możesz użyć list-comprehension:

values = [x[0] for x in list]
offsets = [x[1] for x in list]

Jeszcze jedna ważna rzecz, Unikaj za pomocą funkcji built-in jak list jako zmienne, użyj czegoś innego.

0
Mohd 24 czerwiec 2017, 02:56

Zrobię to jak:

my_list = [ ("VALUE1", "OFFSET1"), ("VALUE2", "OFFSET2") ]

def printList(my_llst):
  values = []
  ofts = []
  for item in my_llst:
      values.append(item[0])
      ofts.append(item[1])
  return (values,ofts)

(["Wartość 1", "Value2"], ["Offset1", "Offset2"])

0
Damián Rafael Lattenero 24 czerwiec 2017, 02:56

Możesz użyć zip, który transponuje listę i zbiera elementy w tej samej pozycji do jednego elementu w wyniku:

value, offset = zip(*my_list)

value
#('VALUE1', 'VALUE2')

offset
#('OFFSET1', 'OFFSET2')
2
Psidom 24 czerwiec 2017, 02:51