2013-08-27 30 views
1

我有過Java/C#/ C++和循環的經驗,或者如果不完全相同,現在我通過Codecademy學習Python。我發現它向我解釋循環的方式很差。他們給你的代碼是請解釋Python for循環到C++/C#/ Java程序員

my_list = [1,9,3,8,5,7] 

for number in my_list: 
    # Your code here 
    print 2 * number 

這是說for every number in my_list ... print 2 * number。 這對我來說有點意義,如果這是真的,但我沒有得到number以及如何工作。這甚至不是早些時候宣佈的變量。你用for循環聲明瞭一個變量嗎?那麼Python如何知道該數字正在訪問my_list中的值並將它們乘以2?另外,for循環如何處理列表以外的事情,因爲我查看了其他包含for循環的Python代碼,它們沒有任何意義。你能找到一些方法來解釋它們類似於C#for循環的方式,或者只是簡單地解釋Python for循環。

+0

謝謝。那回答那部分。 – freemann098

+0

我發現它們與各種語言中的for-each循環非常相似。 –

+0

它基本上與Java或C++ 11中的for(int number:my_list)相同。 C#可能有類似的東西。 – user2357112

回答

1

是的,number是一個新定義的變量。 Python在使用它們之前不需要聲明變量。循環迭代的理解是正確的。

這與sytnax Borne風格的shell使用相同(如bash)。

for循環的邏輯是這樣的:給列表中的下一個值分配指定變量,迭代,重複。

更正 至於其他非列表值,它們應該轉換成python序列。試試這個:

val="1 2 3" 
for number in val: 
     print number 

注意這打印「1」,「」,「2」,「」,「3」。

下面是一個有用的參考:http://www.tutorialspoint.com/python/python_for_loop.htm

+0

本頁的第5.6節解釋了序列:http://docs.python.org/2/library/stdtypes.html – ash

1

與C#相關的快速答案是Python for循環大致等同於C#foreach循環。 C++類型具有類似的功能(例如,BOOST_FOREACH或C++ 11中的for語法),但C沒有等效功能。

在C風格的for (initial; condition; increment)樣式循環中沒有Python的等價物。

Python for循環可以遍歷不僅僅是列表;他們可以迭代任何可迭代的。例如參見What makes something iterable in python

0

Python for循環應該與C#foreach循環非常相似。它逐步通過my_list,並且在每一步中您都可以使用「數字」來尊重列表中的該元素。

如果您想訪問列表索引和列表元素,而你是迭代,通常的成語是用克「枚舉功能:

for (i, x) in enumerate(my_list): 
    print "the", i, "number in the list is", x 

foreach循環應該應類似於以下脫糖代碼:

my_iterator = iter(my_list) 
while True: 
    try: 
    number = iter.next() 
    #Your code here 
    print 2*number 
    except StopIteration: 
     break 
0

在Python中你不需要聲明變量在這種情況下,number變量由循環使用它定義。

對於循環結構本身,它的類似於C++ 11 range-based for loop

std::vector<int> my_list = { 1, 9, 3, 8, 5, 7 }; 

for (auto& number : my_list) 
    std::cout << 2 * number << '\n'; 

這當然可以實現預C++使用std::for_each與合適的函子對象11(其可以當然是C++ 11 lambda表達式)。

Python沒有與普通C風格for循環相當的功能。

0

Python使用協議(使用特殊命名方法進行鴨式打印,使用雙下劃線前後固定)。 Java中的等價物將是一個接口或抽象基類。

在這種情況下,在Python中的任何一個實現the iterator protocol可以在for循環使用:

class TheStandardProtocol(object): 
    def __init__(self): 
     self.i = 0 

    def __iter__(self): 
     return self 

    def __next__(self): 
     self.i += 1 
     if self.i > 15: raise StopIteration() 
     return self.i 

    # In Python 2 `next` is the only protocol method without double underscores 
    next = __next__ 


class TheListProtocol(object): 
    """A less common option, but still valid""" 
    def __getitem__(self, index): 
     if index > 15: raise IndexError() 
     return index 

然後,我們可以使用兩種類的實例在for循環,一切都將正常工作:

standard = TheStandardProtocol() 
for i in standard: # `__iter__` invoked to get the iterator 
    # `__next__` invoked and its return value bound to `i` 
    # until the underlying iterator returned by `__iter__` 
    # raises a StopIteration exception 
    print i 

# prints 1 to 15 

list_protocol = TheListProtocol() 
for x in list_protocol: # Python creates an iterator for us 
    # `__getitem__` is invoked with ascending integers 
    # and the return value bound to `x` 
    # until the instance raises an IndexError 
    print x 

# prints 0 to 15 

Java中的等價物是IterableIterator接口:

class MyIterator implements Iterable<Integer>, Iterator<Integer> { 
    private Integer i = 0; 

    public Iterator<Integer> iterator() { 
     return this; 
    } 

    public boolean hasNext() { 
     return i < 16; 
    } 

    public Integer next() { 
     return i++; 
    } 
} 

// Elsewhere 

MyIterator anIterator = new MyIterator(); 

for(Integer x: anIterator) { 
    System.out.println(x.toString()); 
} 
1

Python並不需要聲明它可以在初始化

雖然時間來宣佈自己做,而類似於語言的變量,但for循環Python中完全不同的

可以使用它類似於每個 但出於其他目的想從1運行10你可以用列表,

for number in range(10): 
    print number 
0

我會盡量解釋蟒蛇爲循環到你多少基本的方式可能:

比方說,我們有一個列表:

a = [1, 2, 3, 4, 5] 

在我們跳入for循環讓利我告訴你我們不必在聲明變量的時候在python中初始化變量類型。

int a,str a不是必需的。

讓我們現在去for循環。

for i in a: 
    print 2*i 

現在,它有什麼作用?

循環將來自第一元件,以便啓動,

i is replaced by 1並且其乘以2,並顯示出來。它與1完成後,將跳轉至2

關於你提到的另一個問題是:

Python知道它的變量類型,它的執行:

>>> a = ['a', 'b', 'c'] 
>>> for i in a: 
...  print 2*i 
... 
aa 
bb 
cc 
>>>