2017-01-12 143 views
1

首先,當被視爲字符組,我已經整理出我的問題,當我發現這一點: in python: iterate over each string in a list字符串迭代

本來我得到了我認爲是怪異的行爲時,我會遍歷一個「名單「用一個字符串。在這些情況下,字符串被視爲一組字符,並且迭代順序返回字符串中的每個字符。

作爲Python的新手,我沒有意識到使用[]和()來定義列表之間存在着某種嚴格的區別。我的列表定義使用()。但是,當列表包含多個字符串時,迭代將按順序返回每個完整的字符串。爲了說明:

list = ('string') 
for i in list: 
    print i 

輸出:

s 
t 
r 
i 
n 
g 

但如果我這樣做,就是添加第二個字符串到()組:

list = ('string','another string') 
for i in list: 
    print i 

它被視爲如同我用[](如你所想)。輸出:

string 
another string 

現在,我得到預期的行爲,無論哪種方式,如果我使用[]來定義我的列表,所以這就是我現在正在做什麼。我只是認爲這是一個有趣的行爲。

有人能指點我一些文檔,解釋Python解釋parens的方式,特別是相對於字符串?

我沒有看到在Python文檔的任何數據結構: https://docs.python.org/3/tutorial/datastructures.html

謝謝!

+0

請不要使用'list'作爲變量名稱。這會導致對「列表」功能的引用 – dawg

+0

在Python中,字符串是字符序列,字符是一個字符串。 'list's也是序列(任何東西),有時似乎很難區分它們。 – martineau

回答

2

這是因爲圓括號不定義列表。他們有時會定義元組(a, b),它與列表類似,但即使在您提供的代碼中,它也不是元組。

('string') 

是一個加括號的表達式。它的價值是'string'

('string',) 

是1元組包含單個元件,該字符串'string'

+2

請注意'元組'是不可變的。元素不能添加或刪除。真正的'list'對象用括號'[1,2,3]'表示,不同於括號,'[1]'實際上是1元素列表 – slezica

1

在第一種情況中,括號是不明確的。你是指單個元素元組還是你的意思是加了一個加括號的表達式? Python解析器假定帶括號的表達式。然後,您遍歷字符串:

>>> li = ('string') 
>>> li 
'string' 

這與創建一個列表文本或設置文本與單一字符串字面量,因爲沒有歧義你的意思:

>>> ['string'] 
['string'] 
>>> {'string'} 
set(['string']) 

在第二種情況,要創建有兩個元素的元組,然後在該元組迭代:

>>> li = ('string','another string') 
>>> li 
('string', 'another string') 

如果你想在第一種情況下要像第二種情況下,添加一個逗號創建一個元素的元組:

>>> li = ('string',) 
>>> li 
('string',) 

或者,你不必使用括號來定義一個元組:

>>> 'string','another string' 
('string', 'another string') 
>>> 'string', 
('string',) 

在這種情況下,元組構造是允許這個成語的Python爲交換逗號

>>> a='string' 
>>> b='another string' 
>>> a,b=b,a 
>>> a 
'another string' 
>>> b 
'string' 

(請不要使用list爲:沒有一個臨時變量的值一個變量名。重新定義list函數...)

+0

謝謝你。是的,通常我不會用變量名做類似的事情,這只是快速和骯髒的僞代碼。 :) – dsbalaban