7

私はプログラミングが初めてで、多くの概念を理解していません。誰かが2行目の構文とそれがどのように機能するかを説明してもらえますか? インデントは不要ですか?また、どこからこれらすべてを学ぶことができますか?

string = #extremely large number

num = [int(c) for c in string if not c.isspace()]
4

4 に答える 4

14

それはリスト内包表記であり、新しいリストを作成するための一種の省略形です。機能的には次のものと同等です。

num = []
for c in string:
    if not c.isspace():
       num.append(int(c))
于 2012-09-13T19:05:05.327 に答える
4

それはまさにそれが言うことを意味します

num   =        [          int(                      c)

"num" shall be a list of: the int created from each c

for   c                           in string

where c takes on each value found in string

if        not                     c .isspace() ]

such that it is not the case that c is a space (end of list description)
于 2012-09-13T21:03:13.663 に答える
1

プログラミングにかなり慣れていないかのようにmgilsonの答えを拡張するだけでも、少し鈍感になる可能性があります。私は数ヶ月前にPythonを学び始めたので、ここに私の注釈があります。

string = 'aVeryLargeNumber'
num = [int(c) for c in string if not c.isspace()] #list comprehension

"""Breakdown of a list comprehension into it's parts."""
num = [] #creates an empty list
for c in string: #This threw me for a loop when I first started learning
     #as everytime I ran into the 'for something in somethingelse':
     #the c was always something else. The c is just a place holder
     #for a smaller unit in the string (in this example). 
     #For instance we could also write it as:
     #for number in '1234567890':, which is also equivalent to 
     #for x in '1234567890': or 
     #for whatever in '1234567890'
             #Typically you want to use something descriptive.
     #Also, string, does not have to be just a string. It can be anything
     #so long as you can iterate (go through it) one item at a time
     #such as a list, tuple, dictionary.

if not c.isspace(): #in this example it means if c is not a whitespace character
        #which is a space, line feed, carriage return, form feed,
                #horizontal tab, vertical tab.

num.append(int(c))  #This converts the string representation of a number to an actual
        #number(technically an integer), and appends it to a list. 

'1234567890' # our string in this example
num = []
    for c in '1234567890':
        if not c.isspace():
            num.append(int(c))

ループの最初の反復は次のようになります。

num = [] #our list, empty for now
    for '1' in '1234567890':
        if not '1'.isspace():
            num.append(int('1'))

1の周りの''に注意してください。''または""の間は、このアイテムが文字列であることを意味します。数字のように見えますが、Pythonに関する限り、そうではありません。それを確認する簡単な方法は、インタプリタに1 + 2と入力し、結果を「1」+「2」と比較することです。違いがわかりますか?あなたが期待するように、それは数字でそれらを足し合わせます。文字列を使用して、それらを結合します。

2回目のパスへ!

num = [1] #our list, now with a one appended!
    for '2' in '1234567890':
        if not '2'.isspace():
            num.append(int('2'))

そのため、文字列内の文字がなくなるか、エラーが発生するまで続行されます。文字列が「1234567890.12345」の場合はどうなりますか?安全に「。」と言えます。空白文字ではありません。したがって、int('。')に到達すると、Pythonはエラーをスローします。

Traceback (most recent call last):
    File "<string>", line 1, in <fragment>
builtins.ValueError: invalid literal for int() with base 10: '.'

Pythonを学習するためのリソースに関しては、次のような無料のチュートリアルがたくさんあります。

http://www.learnpython.org

http://learnpythonthehardway.org/book

http://openbookproject.net/thinkcs/python/english3e

http://getpython3.com/diveintopython3

学習用の本を購入したい場合は、http://www.amazon.com/Learning-Python-Powerful-Object-Oriented-Programming/dp/0596158068が私のお気に入りです。なぜ評価が低いのかはわかりませんが、作者は素晴らしい仕事をしていると思います。

幸運を!

于 2012-09-13T21:26:11.873 に答える
0

これらのPEPの例は、開始するのに適した場所です。に慣れていない場合は、一歩下がって基礎について学ぶ必要がrangeあります。%

>>> print [i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> print [i for i in range(20) if i%2 == 0]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

>>> nums = [1,2,3,4]
>>> fruit = ["Apples", "Peaches", "Pears", "Bananas"]
>>> print [(i,f) for i in nums for f in fruit]
[(1, 'Apples'), (1, 'Peaches'), (1, 'Pears'), (1, 'Bananas'),
 (2, 'Apples'), (2, 'Peaches'), (2, 'Pears'), (2, 'Bananas'),
 (3, 'Apples'), (3, 'Peaches'), (3, 'Pears'), (3, 'Bananas'),
 (4, 'Apples'), (4, 'Peaches'), (4, 'Pears'), (4, 'Bananas')]
>>> print [(i,f) for i in nums for f in fruit if f[0] == "P"]
[(1, 'Peaches'), (1, 'Pears'),
 (2, 'Peaches'), (2, 'Pears'),
 (3, 'Peaches'), (3, 'Pears'),
 (4, 'Peaches'), (4, 'Pears')]
>>> print [(i,f) for i in nums for f in fruit if f[0] == "P" if i%2 == 1]
[(1, 'Peaches'), (1, 'Pears'), (3, 'Peaches'), (3, 'Pears')]
>>> print [i for i in zip(nums,fruit) if i[0]%2==0]
于 2012-09-13T21:40:42.393 に答える