Mam listę, która składa się z listy ciągów, jestem zainteresowany przekształceniem tej listy na int. Jak to zrobić. k2=["'95', '66', '137', '70', '20'", "'36', '66', '44', '214', '...

2
acoustic python 28 czerwiec 2021, 06:56

4 odpowiedzi

Najlepsza odpowiedź

Przejdź przez każdy element na liście, a następnie podziel je , i usuń poprzedni i następny cytat ' oraz odstęp

result = []
for v in k2:
    result += [int(i.strip("' ")) for i in v.split(',')]

#output:
[95, 66, 137, 70, 20, 36, 66, 44, 214, 105, 133]
1
Don'tAccept 28 czerwiec 2021, 04:11

W przypadku, gdy musisz zdobyć listę list. Iteruj po podziale listy , i znajdź int, a wyniki możesz dołączyć w tym samym indeksie.

for i,va in enumerate(k3):
    k3[i] = ([int(re.findall(r'\d+', val)[0]) for val in va.split(',')])
# output[[95, 66, 137, 70, 20], [36, 66, 44, 214, 105, 133]]
0
Prayalankar Ashutosh 28 czerwiec 2021, 04:10

Można to zrobić za pomocą pojedynczej listy ze zrozumieniem.

In [28]: k3 = [int(string.strip(" '")) for k in k2 for string in k.split(',')]
Out[29]: [95, 66, 137, 70, 20, 36, 66, 44, 214, 105, 133]
0
merced 28 czerwiec 2021, 04:09

W przypadku bardziej ogólnego przypadku możesz użyć regular expression

import re

out = []

k3=["'95', '66', '137', '70', '20'", "'36', '66', '44', '214', '105', '133'"]

for i in k3:
    result = re.findall(r'\D(\d+)\D', i)
    out.extend(result)
    
print(out)
['95', '66', '137', '70', '20', '36', '66', '44', '214', '105', '133']

Wyjaśnienie wyrażenia regularnego:

https://regex101.com/r/2rhNJl/1

1
Epsi95 28 czerwiec 2021, 04:13