Mam taką listę:

list1= [['Sarah', 55, 7, 'x'], ['John', 24, 8, 'x']]

I chcę skopiować to na inną listę, ale zachowując ją jako taką macierz:

list2= [['Sarah', 55.0, 7.0], ['John', 24.0, 8.0]]

Więc to, co chcę zrobić, to uczynić każdą liczbę zmiennoprzecinkową i usunąć ostatni element każdej podlisty

2
Super77 2 kwiecień 2020, 17:27

4 odpowiedzi

Najlepsza odpowiedź
list1 = [['Sarah', 55, 7, 'x'], ['John', 24, 8, 'x']]

list2 = [[] for x in range(len(list1))]

x = 0

for rp in range(len(list1)):
    #len(list1[rp])-1 for not count the last element for each array 
    for tp in range(len(list1[rp])-1):
        #check the type of item string
        if "str" in str(type(list1[rp][tp])):
            list2[x].append(list1[rp][tp])
        #check the type of item int
        elif "int" in str(type(list1[rp][tp])):
            #convert the item int to float
            td = float(list1[rp][tp])
            list2[x].append(td)

    x += 1

print("List 1 :" + str(list1))
print("List 2 :" + str(list2))

#OUTPUT
#List 1 :[['Sarah', 55, 7, 'x'], ['John', 24, 8, 'x']]
#List 2 :[['Sarah', 55.0, 7.0], ['John', 24.0, 8.0]]
1
SiegridBeens 2 kwiecień 2020, 16:19

Możesz użyć zagnieżdżonego wyrażenia listy, rzutując na float wszystkie ciągi, które spełniają str.isnumeric:

[[float(j) if str(j).isnumeric() else j for j in i] for *i, _ in list1]
# [['Sarah', 55.0, 7.0], ['John', 24.0, 8.0]]
1
yatu 2 kwiecień 2020, 14:29

Możesz skorzystać z prostego rozumienia listy tutaj:

[[name, *map(float, i)] for name, i, _ in list1]

Wyniki:

[['Sarah', 55.0, 7.0], ['John', 24.0, 8.0]]
1
Jab 2 kwiecień 2020, 14:33

Możesz użyć rozpakowania, aby konwersja była jaśniejsza:

list2 = [ [name,float(n1),float(n2)] for name,n1,n2,_ in list1 ]
0
Alain T. 2 kwiecień 2020, 17:28