2010-07-20 35 views
15

Cách nào nhất để chuyển đổi một danh sách các bộ dữ liệu thành chuỗi?Python - chuyển đổi danh sách các bộ dữ liệu thành chuỗi

tôi có:

[(1,2), (3,4)] 

và tôi muốn:

"(1,2), (3,4)" 

Giải pháp của tôi để này đã được:

l=[(1,2),(3,4)] 
s="" 
for t in l: 
    s += "(%s,%s)," % t 
s = s[:-1] 

Có cách nào pythonic hơn để làm điều này?

+2

Các bộ dữ liệu này là gì, tại sao chúng cần phải nằm trong một chuỗi và thực tế chúng có cần phải là bộ dữ liệu không? –

+1

tại sao bạn muốn thực hiện việc này? vấn đề thực sự của bạn là gì? – SilentGhost

+1

@Ignacio, @SilentGhost: Tôi rất muốn các bạn xây dựng thêm ý kiến ​​của mình (tôi vẫn đang tự học Python). Nó có thể không phải là một câu trả lời thực tế cho vấn đề định dạng chuỗi của OP, nhưng tôi chắc rằng các bạn có những điểm rất quan trọng để thực hiện. – polygenelubricants

Trả lời

22

bạn có thể muốn sử dụng một cái gì đó đơn giản như:

>>> l = [(1,2), (3,4)] 
>>> str(l).strip('[]') 
'(1, 2), (3, 4)' 

.. đó là tiện dụng, nhưng không được bảo đảm để làm việc một cách chính xác

+2

Điều gì sẽ xảy ra nếu các bộ dữ liệu là các chuỗi gồm các chuỗi chứa []? –

+5

@Rob: 'str.strip()' chỉ loại bỏ từ đầu. –

+4

Có vẻ như thực hành không tốt để dựa vào biểu diễn chuỗi nội bộ của danh sách. –

30

Bạn có thể thử một cái gì đó như thế này (see also on ideone.com):

myList = [(1,2),(3,4)] 
print ",".join("(%s,%s)" % tup for tup in myList) 
# (1,2),(3,4) 
+0

trong khi giải pháp @ mykhal đơn giản hơn, tôi nghĩ rằng điều này là đẹp hơn :) –

+0

Pythonic, mạnh mẽ và ngắn. Cảm ơn. – Neowizard

1

Làm thế nào về

l = [(1, 2), (3, 4)] 
print repr(l)[1:-1] 
# (1, 2), (3, 4) 
+0

Khoảng cách ở đây không thực sự như bạn đã quy định; nếu đó là quan trọng, cách tiếp cận này sẽ không hoạt động như python thêm một không gian sau mỗi mục trong một danh sách/tuple. – Benj

13

Làm thế nào về:

>>> tups = [(1, 2), (3, 4)] 
>>> ', '.join(map(str, tups)) 
'(1, 2), (3, 4)' 
+1

Giải pháp sạch nhất cho đến nay! –

+0

nhất câu trả lời "pythonic". –

0

Ba hơn :)

l = [(1,2), (3,4)] 

unicode(l)[1:-1] 
# u'(1, 2), (3, 4)' 

("%s, "*len(l) % tuple(l))[:-2] 
# '(1, 2), (3, 4)' 

", ".join(["%s"]*len(l)) % tuple(l) 
# '(1, 2), (3, 4)' 
1

Tôi nghĩ rằng đây là khá gọn gàng:

>>> l = [(1,2), (3,4)] 
>>> "".join(str(l)).strip('[]') 
'(1,2), (3,4)' 

Hãy thử nó, nó làm việc như một nét duyên dáng cho tôi.

Các vấn đề liên quan