2011-03-26 115 views
61

所以我有一個列表:如何「正確」打印清單?

['x', 3, 'b']

而且我所要的輸出是:

[x, 3, b]

我怎樣才能做到這一點在Python?

如果我做str(['x', 3, 'b']),我得到一個引號,但我不想引用。

回答

131
mylist = ['x', 3, 'b'] 
print '[%s]' % ', '.join(map(str, mylist)) 
+4

謝謝你的偉大工程。你能詳細解釋一下你在第二行做什麼?我是python的新手。 – Obaid 2011-03-26 23:12:41

+16

他正在使用'map'函數爲'mylist'的每個元素調用'str',創建一個新的字符串列表,然後用'str.join'加入到一個字符串中。然後,他使用'%'字符串格式化運算符替換'「[%s]」'中的字符串而不是'%s'。 – 2011-03-26 23:54:46

+5

另一種可能更現代的方法是: '「[{0}]」。format(「,」.join(str(i)for i in mylist))' – 2013-09-11 13:25:07

2

這是一個交互式會話,顯示@ TokenMacGuy的一行內的一些步驟。首先,他使用map函數將列表中的每個項目轉換爲一個字符串(實際上,他正在創建一個新列表,而不是轉換舊列表中的項目)。然後他使用字符串方法join將這些字符串與它們之間的', '組合起來。其餘的只是字符串格式,這非常簡單。 (編輯:這個實例很簡單;字符串格式化通常可能有點複雜。)

請注意,使用join是一種簡單高效的方法,可以從幾個子字符串中構建一個字符串,比通過連續添加字符串轉換爲字符串,這涉及很多在幕後複製。

>>> mylist = ['x', 3, 'b'] 
>>> m = map(str, mylist) 
>>> m 
['x', '3', 'b'] 
>>> j = ', '.join(m) 
>>> j 
'x, 3, b' 
8

而不是使用map的,我建議你使用與join能力的生成器表達式接受一個迭代器:

def get_nice_string(list_or_iterator): 
    return "[" + ", ".join(str(x) for x in list_or_iterator) + "]" 

這裏,join是String類str的成員函數。它有一個參數:字符串的列表(或迭代器),然後返回一個新字符串,其中包含所有元素,在本例中爲,

+2

對於Python 2來說一個很好的優化,因爲map在2.x中返回一個列表。它在3.x中返回一個生成器,所以它沒有那麼多幫助。 – 2011-03-27 00:02:00

+6

我會返回''「,」.join(str(x)for x in list_or_iterator).join('[]')'' – eyquem 2011-03-27 12:23:06

+0

@eyquem:聰明,我還沒有見過像以前那樣使用join。儘管如此,這對初學者來說更加不透明(因爲你使用的屬性是一個字符串是一個單字符字符串的可迭代容器)。 – 2011-03-27 13:10:58

10

如果您正在使用Python3:

print('[',end='');print(*L, sep=', ', end='');print(']') 
+1

打印(* L)在這裏做什麼? – sandeeps 2017-07-28 05:24:19

+1

@sandeeps:請參閱https://docs.python.org/3/reference/expressions.html#calls – Kabie 2017-07-28 07:07:29

+0

感謝您分享鏈接! – sandeeps 2017-07-28 23:50:08

6

可以使用其translate() methodNone刪除字符串中的所有不想要的字符爲table參數後跟包含要刪除的字符(縣)的字符串對於它的deletechars的說法。

lst = ['x', 3, 'b'] 

print str(lst).translate(None, "'") 

# [x, 3, b] 

如果你使用一個版本的Python 2.6之前,你需要使用string模塊的translate()函數,而不是因爲能力通過None作爲table說法未添加到Python 2.6中。使用它看起來像這樣:

import string 

print string.translate(str(lst), None, "'") 

使用string.translate()功能也將在2.6+工作,因此使用它可能是可取的。

+1

唉:''lst = [「它不是」,3,'b']''==>''[「it isnt」,3,b]''還有''lst = ['it 3,'b']'' – eyquem 2011-03-27 12:20:03

+0

@eyquem:是的,避免刪除實際上是數據一部分的字符(而不是嚴格地用於分隔它)自然需要稍微更精細/不同的邏輯,如果這是一種可能性。 – martineau 2011-03-27 20:39:25

7

這是簡單的代碼,所以如果你是新手,你應該很容易理解它。

mylist = ["x", 3, "b"] 
    for items in mylist: 
     print(items) 

它打印所有不帶引號,就像你想要的。

5

只使用打印:

>>> l = ['x', 3, 'b'] 
>>> print(*l, sep='\n') 
x 
3 
b 
>>> print(*l, sep=', ') 
x, 3, b 
1

使用.format字符串格式化,

mylist = ['x', 3, 'b'] 
print("[{0}]".format(', '.join(map(str, mylist)))) 

輸出:

[x, 3, b] 

說明:

  1. map用於該列表中的每個元素映射到string類型。
  2. 這些元素連接在一起形成一個字符串,作爲分隔符。
  3. 我們在打印語句中使用[]來顯示列表大括號。

參考: .format for string formatting PEP-3101