2015-11-16 93 views
0

我有一個元組列表,我想打印這個列表的扁平形式。我不想轉換列表,只是在沒有括號和括號的情況下打印它。打印沒有括號的元組的列表python

input: [ ("a", 1), ("b",2), ("c", 3)] 
output: a 1 b 2 c 3 

這是我做的:

l = [ ("a", 1), ("b",2), ("c", 3)] 
f = lambda x: " ".join(map(str,x)) 
print " ".join(f(x) for x in l) 

我很感興趣,如果任何人有一個更優雅,可能更有效的解決方案,可能沒有做加盟,只打印。提前致謝。

+0

連接是輸出列表作爲字符串 – njzk2

回答

3
from __future__ import print_function 

l = [("a", 1), ("b",2), ("c", 3)] 

print(*(i for j in l for i in j)) 
a 1 b 2 c 3 

或者用itertools.chain扁平化:

from itertools import chain 

print(*chain(*l)) 
+1

是的,我不知道你能做到這一點。 Yay for Python 3. –

+1

非常好的答案。 – Kasramvd

+1

耶從你我也爲Python 3。 – dogacanb

2

使用str.join(),你可以使用嵌套列表理解:

>>> print ' '.join([str(i) if isinstance(i,int) else i for tup in A for i in tup]) 
a 1 b 2 c 3 

而且沒有join()仍然需要遍歷所有的項目和將它們連接起來,我認爲join()是這個目標更Python的方式。

+0

不幸的是,OP是尋找不'join'解決方案的最簡單的方法。雖然好的解決方案 – idjaw

+0

@idjaw是的,我明白了。 – Kasramvd

+0

我編輯了我的問題:)我想盡可能避免打印以外的操作。解決方案很好,但。 – dogacanb

1

如果你絕對要做到這一點,而不列表扁平化操作,如join,那麼這將工作,但它是可怕的,你應該只使用join

[sys.stdout.write(str(i) + ' ' + str(j) + ' ') for (i, j) in input] 

使用stdout.write,因爲它不會自動追加一個換行符像print呢。