@Clinteney: Żaden problem ;-) Możesz także sprawdzić, pickleczy utrwalasz obiekty w łańcuchach.
Cameron,
2
To nie jest tablica, to jest lista. Tablice reprezentują podstawowe wartości i zachowują się bardzo podobnie do list, z wyjątkiem tego, że typ obiektów w nich przechowywanych jest ograniczony.
joaquin
8
Przyjazne przypomnienie: nie używaj eval, nawet jeśli ufasz, że string jest bezpieczny. Nie jest warte potencjalnego zagrożenia bezpieczeństwa dla czegokolwiek innego niż osobiste skrypty i majstrowanie w interaktywnej powłoce.
A. Wilson,
3
eval ('[' + tekst + ']') potraktuje a, b, c jako zmienne, a nie łańcuch.
phaibin
1
Negocjowane, ponieważ te dwa proponowane rozwiązania robią zupełnie inne rzeczy, a nie jest to w żaden sposób wyjaśnione w tekście odpowiedzi. Chociaż samo pytanie nie jest do końca jasne, w odpowiedzi należy wyjaśnić, że te dwa rozwiązania nie są równoważnymi alternatywami, ale różnymi interpretacjami pytania.
Matteo Italia
179
Aby dodać do istniejących odpowiedzi: miejmy nadzieję, że w przyszłości napotkasz coś podobnego:
>>> word ='abc'>>> L = list(word)>>> L
['a','b','c']>>>''.join(L)'abc'
Ale to, co masz do czynienia teraz , iść z @ Cameron odpowiedzi „s.
>>> word ='a,b,c'>>> L = word.split(',')>>> L
['a','b','c']>>>','.join(L)'a,b,c'
Chociaż zgadzam się z tobą, że odpowiedź @ Camerona była odpowiedzią "teraz", myślę, że twoja dokładność sprawia, że jest to bardziej poprawna odpowiedź. W prawdziwym świecie rzadko otrzymujemy ciągi znaków oddzielone przecinkami i dobrze jest wiedzieć, jak przekonwertować na listę, niezależnie od formatu.
TristanZimmerman
39
Poniższy kod w Pythonie zamieni Twój ciąg w listę ciągów:
>>>from array import array
>>> text ="a,b,c">>> text = text.replace(',','')>>> myarray = array('c', text)>>> myarray
array('c','abc')>>> myarray[0]'a'>>> myarray[1]'b'
Jeśli nie potrzebujesz tablic i chcesz tylko przeglądać swoje znaki według indeksu, pamiętaj, że ciąg jest iterowalny, podobnie jak lista, z wyjątkiem faktu, że jest niezmienny:
>>> text ="a,b,c">>> text = text.replace(',','')>>> text[0]'a'
Z ciekawości, po wykonaniu myarray = array ('c', text), gdzie się podziało "c"? ponieważ jeśli wpiszesz tablicę, otrzymasz tablicę ("c", "abc"), ale [0] == a? Dziękuję
Clinteney Hui
@Clinteney: „c” oznacza „utwórz tablicę znaków”. Zobacz dokumentację, aby uzyskać więcej informacji
Cameron
Głosowałem za, ale za wcześnie. Otrzymuję tablicę ('c', '1 1 91 0,001 228') podczas wywoływania a = array ('c', e), gdzie e = "1 1 91 0,001 228"
Valentin Heinitz
@ValentinHeinitz Tak, to właśnie musisz uzyskać, jak pokazano w moim przykładzie. Czego oczekujesz ?
joaquin
1
@joaquin: Ok, rozumiem. Odpowiedź jest w porządku. Zmyliło mnie pytanie „tekst == [a, b, c]” powinno być „tekst == ['a', 'b', 'c']”
Valentin Heinitz
4
m ='[[1,2,3],[4,5,6],[7,8,9]]'
m= eval(m.split()[0])[[1,2,3],[4,5,6],[7,8,9]]
Aby przekonwertować stringposiadający formularz, a="[[1, 3], [2, -6]]"który napisałem jeszcze nie zoptymalizowany kod:
matrixAr =[]
mystring ="[[1, 3], [2, -4], [19, -15]]"
b=mystring.replace("[[","").replace("]]","")# to remove head [[ and tail ]]for line in b.split('], ['):
row =list(map(int,line.split(',')))#map = to convert the number from string (some has also space ) to integer
matrixAr.append(row)print matrixAr
Odpowiedzi:
Lubię to:
Alternatywnie możesz użyć,
eval()
jeśli ufasz, że ciąg jest bezpieczny:źródło
pickle
czy utrwalasz obiekty w łańcuchach.Aby dodać do istniejących odpowiedzi: miejmy nadzieję, że w przyszłości napotkasz coś podobnego:
Ale to, co masz do czynienia teraz , iść z @ Cameron odpowiedzi „s.
źródło
Poniższy kod w Pythonie zamieni Twój ciąg w listę ciągów:
źródło
json
na przykład:json.loads(teststr)
Myślę, że nie potrzebujesz się
W Pythonie rzadko trzeba konwertować ciąg znaków na listę, ponieważ łańcuchy i listy są bardzo podobne
Zmiana typu
Jeśli naprawdę masz ciąg, który powinien być tablicą znaków, zrób to:
Nie zmienia typu
Zauważ, że ciągi znaków są bardzo podobne do list w pythonie
Łańcuchy mają akcesory, takie jak listy
Łańcuchy są iterowalne, podobnie jak listy
TLDR
Ciągi znaków to listy. Prawie.
źródło
Jeśli chcesz podzielić spacjami, możesz po prostu użyć
.split()
:Wynik:
źródło
()
, tj. W ogóle nic.Jeśli faktycznie chcesz tablice:
Jeśli nie potrzebujesz tablic i chcesz tylko przeglądać swoje znaki według indeksu, pamiętaj, że ciąg jest iterowalny, podobnie jak lista, z wyjątkiem faktu, że jest niezmienny:
źródło
źródło
Wszystkie odpowiedzi są dobre, jest inny sposób, którym jest zrozumienie listy, zobacz rozwiązanie poniżej.
w przypadku listy oddzielonej przecinkami wykonaj następujące czynności
źródło
Zwykle używam:
te
strip
przestrzenie usuń wokół słów.źródło
Aby przekonwertować
string
posiadający formularz,a="[[1, 3], [2, -6]]"
który napisałem jeszcze nie zoptymalizowany kod:źródło
W
translate
przypadku ciągów znaków należy użyć wbudowanej metody.Wpisz
help('abc'.translate)
w powłoce Pythona, aby uzyskać więcej informacji.źródło
Korzystanie z funkcjonalnego Pythona:
źródło
Przykład 1
Przykład 2
źródło