Chcę utworzyć listę krotek i mieć taką tabelę:
Nr Name Value F/R
1 6347_sx 123.98 F
2 hff_475 234.99 F
3 sjdh_65 123.67 R
4 6347_sx 345.12 R
Chcę mieć taką listę:
norm_list = [('6347_sx',123.98), ('hff_475',234.99), ('sjdh_65',123.67), ('6347_sx',345.12)]
Próbuję tego, ale nie dało mi to pożądanego wyniku:
norm_file = open("table.txt")
norm_list = []
for norm_line in norm_file.readlines():
norm_file_elements = norm_line.split()
x = norm_file_elements[1]
y = norm_file_elements[2]
norm_list= [(x,y)]
print(norm_list)
Wartości y muszą być int. Dziękuję za pomoc.
3 odpowiedzi
Musisz dołączyć element do listy wewnątrz pętli. W przykładowym kodzie zawsze ustawiasz zmienną na listę pojedynczego elementu, zamiast ją dołączać.
Dlatego zmień swój kod w następujący sposób:
norm_file = open("table.txt")
norm_list = []
for norm_line in norm_file.readlines():
norm_file_elements = norm_line.split()
x = norm_file_elements[1]
y = norm_file_elements[2]
norm_list.append((x,y))
print(norm_list)
y = int(norm_file_elements[2])
Wypróbuj funkcję zip
To byłoby o wiele łatwe
print(list(zip(norm_file_elements[1], norm_file_elements[2]))
Możesz użyć re.findall
:
s = """
Nr Name Value F/R
1 6347_sx 123.98 F
2 hff_475 234.99 F
3 sjdh_65 123.67 R
4 6347_sx 345.12 R
"""
d = re.findall('\w+_\w+|\d+\.\d+', s)
result = [(d[i], d[i+1]) for i in range(0, len(d), 2)]
Wynik:
[('6347_sx', '123.98'), ('hff_475', '234.99'), ('sjdh_65', '123.67'), ('6347_sx', '345.12')]
Możesz także użyć re.split
przy rozpakowywaniu:
t = list(filter(None, s.split('\n')))
_, *data = [(a, b) for _, a, b, _ in map(lambda x:re.split('\s+', x), t)]
Wynik:
[('6347_sx', '123.98'), ('hff_475', '234.99'), ('sjdh_65', '123.67'), ('6347_sx', '345.12')]
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.
norm_list = [tuple(line.split()[1:3]) for line in norm_file]