Mam więc listę:
['x', 3, 'b']
Chcę, aby wynik był:
[x, 3, b]
Jak mogę to zrobić w Pythonie?
Jeśli tak str(['x', 3, 'b']), dostaję taki z cudzysłowami, ale nie chcę cytatów.
Odpowiedzi:
W Pythonie 2:
mylist = ['x', 3, 'b']
print '[%s]' % ', '.join(map(str, mylist))
W Pythonie 3 (gdzie printjest już funkcją wbudowaną, a nie funkcją składni):
mylist = ['x', 3, 'b']
print('[%s]' % ', '.join(map(str, mylist)))
Obie wracają:
[x, 3, b]
Jest to użycie map()funkcji do wywołania str dla każdego elementu mylist , tworząc nową listę ciągów, która jest następnie łączona w jeden ciąg str.join(). Następnie %operator formatowania ciągu zastępuje ciąg in zamiast %sin "[%s]".
mapfunkcji do wywołania strkażdego elementu mylist, tworząc nową listę ciągów, z którymi następnie łączy się w jeden ciąg str.join. Następnie używa %operatora formatowania ciągu, aby podstawić ciąg in zamiast %sin "[%s]".
"[{0}]".format(", ".join(str(i) for i in mylist))
map(f, xs)(lub imapw python2.x) zamiast (f(x) for x in xs), kiedy fjest predefiniowanym wywoływanym; który zwykle wykonuje mniej kodów bajtowych i jest zwykle bardziej zwarty. Z pewnością nie jest map(lambda x:..., xs) to dużo gorsze niż(... for x in xs)
To jest prosty kod, więc jeśli jesteś nowy, powinieneś go łatwo zrozumieć.
mylist = ["x", 3, "b"]
for items in mylist:
print(items)
Drukuje je wszystkie bez cytatów, tak jak chciałeś.
Jeśli używasz Python3:
print('[',end='');print(*L, sep=', ', end='');print(']')
print(end='['); print(*l, sep=', ', end=']\n')
Zamiast używać map, polecam użycie wyrażenia generatora z możliwością joinakceptacji iteratora:
def get_nice_string(list_or_iterator):
return "[" + ", ".join( str(x) for x in list_or_iterator) + "]"
Tutaj joinjest funkcją składową klasy string str. Pobiera jeden argument: listę (lub iterator) ciągów, a następnie zwraca nowy łańcuch ze wszystkimi elementami połączonymi w tym przypadku przez ,.
", ".join( str(x) for x in list_or_iterator).join('[]')
Możesz usunąć wszystkie niechciane znaki z ciągu, używając jego translate()metody z argumentem Nonejako tableargumentem, a następnie ciągiem zawierającym znaki, które chcesz usunąć jako deletecharsargument.
lst = ['x', 3, 'b']
print str(lst).translate(None, "'")
# [x, 3, b]
Jeśli używasz wersji Pythona wcześniejszej niż 2.6, musisz zamiast tego użyć funkcji stringmodułu, translate()ponieważ możliwość przekazania Nonejako tableargumentu nie została dodana przed Pythonem 2.6. Używanie go wygląda następująco:
import string
print string.translate(str(lst), None, "'")
Korzystanie z tej string.translate()funkcji będzie działać również w wersji 2.6+, więc korzystanie z niej może być lepsze.
lst = ["it isn't", 3, 'b']==> ["it isnt", 3, b]a także zlst = ['it isn\'t', 3, 'b']
Oto interaktywna sesja pokazująca niektóre kroki w jednej linijce @ TokenMacGuy. Najpierw używa mapfunkcji do konwersji każdej pozycji na liście na łańcuch (właściwie tworzy nową listę, a nie konwertuje pozycje ze starej listy). Następnie używa metody string, joinaby połączyć te ciągi', ' między nimi. Reszta to po prostu formatowanie napisów, co jest dość proste. (Edycja: to wystąpienie jest proste; ogólnie formatowanie ciągów może być nieco złożone).
Zauważ, że użycie joinjest prostym i wydajnym sposobem na zbudowanie łańcucha z kilku podciągów, znacznie bardziej wydajnym niż robienie tego poprzez sukcesywne dodawanie ciągów do łańcuchów, co wiąże się z dużym kopiowaniem za kulisami.
>>> mylist = ['x', 3, 'b']
>>> m = map(str, mylist)
>>> m
['x', '3', 'b']
>>> j = ', '.join(m)
>>> j
'x, 3, b'
Używanie .formatdo formatowania ciągów,
mylist = ['x', 3, 'b']
print("[{0}]".format(', '.join(map(str, mylist))))
Wynik:
[x, 3, b]
Wyjaśnienie:
mapsłuży do mapowania każdego elementu listy na stringtyp.,separatorem.[i ]w instrukcji print, aby wyświetlić nawiasy klamrowe.Odniesienie:
.formatdo formatowania ciągów znaków PEP-3101
.formatnajbardziej pytonicznego sposobu. Ale oczywiście akceptuję nieporozumienia. ;)
Zainspirował mnie @AniMenon, aby napisać bardziej ogólne rozwiązanie w Pythonie.
mylist = ['x', 3, 'b']
print('[{}]'.format(', '.join(map('{}'.format, mylist))))
Używa tylko formatmetody. Żadnego śladu str, a pozwala na precyzyjne dostrojenie formatu elementów. Na przykład, jeśli masz liczby zmiennoprzecinkowe jako elementy listy, możesz dostosować ich format, dodając specyfikator konwersji, w tym przypadku:.2f
mylist = [1.8493849, -6.329323, 4000.21222111]
print("[{}]".format(', '.join(map('{:.2f}'.format, mylist))))
Wynik jest całkiem przyzwoity:
[1.85, -6.33, 4000.21]
print(["Sam"])wywołaniarepr("Sam"), które zwracają'Sam'(w cudzysłowach), w przeciwieństwie do wywołańprint("Sam")i wywołań w języku Python,str("Sam")które zwracająSam(bez cudzysłowów). Zobacz różnicę międzystrireprlub Pythonstrilists, aby uzyskać więcej informacji.