2013-01-18 111 views
-1

我只是想知道如何在Python中不使用「in」關鍵字的情況下使用For循環?如何在Python中使用In關鍵字而不使用In關鍵字

由於「in」關鍵字測試以查看值是否在列表中,如果該值在列表中則返回True,如果該值不在列表中則返回False,For循環使用在關鍵字中,也可以使用「of」之類的詞。

不過,我試圖用這樣的代碼:

for i of range(5): 
     print i 

它返回一個語法錯誤。所以我想知道是否有任何方法可以使用For循環,而不使用In關鍵字,因爲它令人困惑。

+0

我沒有在這裏得到了下來/關閉投票。這是不是一個真正的問題?這個問題是清晰的,具體的,並且完全可以回答(「不,你不能,真的。」)它在其他語言中可以修改語法,答案是「是」,甚至Python有幾個角落(從__future__導入print_function')與語法更改。 – DSM

+0

@DSM同意,我不確定爲什麼這已關閉。我不覺得這是一個辯論的問題。我投票重新開放。 –

+0

@Lattyware:我認爲有些人可能會被OP的意見分散注意力,令人困惑,但「有什麼辦法可以做X?」是完全與動機分開的「因爲我不喜歡做Y」。 – DSM

回答

6

不。沒有,它是語言的一部分,無法修改(不修改底層語言實現)。

我認爲它不會混淆,因爲語法讀起來像英語,並且LL(1)語法分析得很好。它還減少了關鍵字的數量(這是好事,因爲它爲變量命名釋放了更多的詞)。

很多語言重複使用在不同的上下文關鍵字,Python來as所做的只是:

import bar as b 

with foo() as f: 
    ... 

3.3做它用from太:

from foo import bar 

def baz(iter): 
    yield from iter 

連渣做到這一點,extends通常是用於爲類提供基類,但它也用於指定泛型類型的上限。

class Foo extends Bar { 
    void baz(List<? extends Bar> barList) { 
     ... 
    } 
} 

請注意,即使這是可能的,這將是一個糟糕的主意,因爲這將減少使用的語言,因爲它代表其他Python程序員可讀性。

編輯:

至於其他的答案已經使用while而是給出了for循環替換,我會添加在做壞事的最佳方式:

iterable = iter(some_data) 
while True: 
    try: 
     value = next(iterable) 
    except StopIteration: 
     break 
    do_something(value) 
+0

我現在明白了,我沒有意識到同音異義也是計算機語言的一部分。謝謝你的澄清。 – user1990687

+0

@ user1990687不,因爲在大多數語言中,單詞可以根據上下文具有不同的含義。 –

+0

@ user1990687:在你的第一句話中(現在已經編輯了!),你用「mean」這個詞,它也可以表示「平均」(比較中位數)或「殘酷」(比較泰勒斯威夫特,將生活在一個大城市裏)。但是你的判斷並不令人困惑,因爲這兩種可能性在語法上都不起作用同樣,'for'中的x和'a'中的x在實踐中並沒有混淆,因爲'in'是普通成員資格,而'for'或缺少'for'告訴我們,重新循環或檢查遏制。 – DSM

1

不,雖然你可以使用一個while循環來代替:

some_list = range(5) 
while some_list: 
    print some_list.pop() 

我個人不明白爲什麼它不清楚,雖然聽說過同名詞? http://en.wikipedia.org/wiki/Homonym

+0

這不同於它修改底層列表(並且不會在3.x中工作,其中'range()'不返回列表)。 –

+0

@Lattyware:這是真的,但我從來沒有聲稱過等效;)或者,一個簡單的計數器可以用於可轉位的東西。 +1爲你的答案順便說一句,這是一個錯誤的解決方案的更好的版本:) – Wolph

+0

當然,我不是說答案是壞的(這裏沒有-1s),只是指出它的功能差異。 –

0

你可以做這樣的事情:

iter = len(list) 
loop = True 
while loop: 
    if iter == 0: 
    loop = False 
    else: 
    do_something(list[iter]) 
    iter =- 1 
return 0 

愚蠢的,但可行的;)

+0

如果你想這樣做,有更好的方法。這在很多方面都很糟糕(很多額外的複雜性,只能在列表上工作,而不是迭代,粉碎'iter()'builtin))。 –

+0

當然,從接受語言結構和語法開始並使用'for i in list';)然而,問題在於如何去做,這裏是我的快速,骯髒和可行的例子。從來沒有聲稱它是最好的,實際上評論自己的愚蠢。 – SpankMe

+0

當然,但我想我會提到*爲什麼*這是不好的。 –

相關問題