在列表的连续元素中放置奇数:Python 3.2

在列表的连续元素中放置奇数:Python 3.2,python,list,function,numbers,Python,List,Function,Numbers,我正在学习Python入门课程。我正在参加期末考试,我不知道该怎么回答一个问题。它要求: 完成以下方法,将字符串s中的奇数放入列表x的连续元素中 def assign(s): length = _____ x = _____*[0] index = 0 for j in range(_____): digit = int(s[j]) #convert to int digit if _____: #test for odd num

我正在学习Python入门课程。我正在参加期末考试,我不知道该怎么回答一个问题。它要求:

完成以下方法,将字符串s中的奇数放入列表x的连续元素中

def assign(s):
    length = _____
    x = _____*[0]
    index = 0
    for j in range(_____):
        digit = int(s[j])  #convert to int digit
        if _____: #test for odd number
            x[_____] = digit
            __________
    print("The odd numbers are")
    for j in range(index):
        print(x[j])
我不知道这是不是它的措辞,但我不知道如何去回答这个问题。我最好的猜测是:

def assign(s):
    length = len(s)
    x = length*[0]
    index = 0
    for j in range(s):
        digit = int(s[j])  #convert to int digit
        if _____: #test for odd number
            x[_____] = digit
            __________
    print("The odd numbers are")
    for j in range(index):
        print(x[j])
我不知道该如何继续,或者我是否已经开始了。我不能改变已经存在的任何东西,我只能填空,它们都必须被填空。有人知道怎么做吗?

以下是解决方案:

def assign(s):
    length = len(s)
    x = length*[0]
    index = 0
    for j in range(length):
        digit = int(s[j])  #convert to int digit
        if digit % 2: #test for odd number
            x[index] = digit
            index += 1

    print("The odd numbers are")
    for j in range(index):
        print(x[j])
你的开头是对的。一个关键点是变量索引指向应该添加到列表x的下一个奇数

但是,请注意,提供给您的模板非常糟糕:它完全违背了Python的精神。它看起来像是C代码被迫进入Python;这不是一个好的做法,因为Python提供了比C更强大的数据结构。下面是一个Python版本:

主要的区别在于你有更少的变量:代码更清晰,人们在阅读代码时必须记住更少的变量。消失的变量本质上是索引:它们通常是不需要的索引在C中很重要,因为C接近于金属:它接近于需要索引的机器语言。因此,不再需要跟踪输入字符串的长度

您也没有那么粗糙:在原始版本中,列表x包含许多0,这些0实际上是无用的、速度较慢的代码,这也很难理解。从本质上讲,pythonlistx被迫像一个C数组:字符串中奇数位数的变量调用列表变量大小,而不是数组固定大小

而且,代码更短的事实使得读写速度更快

正如Jon所建议的,一个更具python风格的版本包括使用列表理解:

def assign(input_string):
    odd_digits = [char for char in input_string if int(char) % 2]  # or: if char in '13579'
    print("The odd digits are", *odd_digits, sep='\n')  # or: ("The odd digits are", odd_digits)
这是一个很好的例子,说明了为什么Python代码的编写和读取速度比C代码快得多。

以下是解决方案:

def assign(s):
    length = len(s)
    x = length*[0]
    index = 0
    for j in range(length):
        digit = int(s[j])  #convert to int digit
        if digit % 2: #test for odd number
            x[index] = digit
            index += 1

    print("The odd numbers are")
    for j in range(index):
        print(x[j])
你的开头是对的。一个关键点是变量索引指向应该添加到列表x的下一个奇数

但是,请注意,提供给您的模板非常糟糕:它完全违背了Python的精神。它看起来像是C代码被迫进入Python;这不是一个好的做法,因为Python提供了比C更强大的数据结构。下面是一个Python版本:

主要的区别在于你有更少的变量:代码更清晰,人们在阅读代码时必须记住更少的变量。消失的变量本质上是索引:它们通常是不需要的索引在C中很重要,因为C接近于金属:它接近于需要索引的机器语言。因此,不再需要跟踪输入字符串的长度

您也没有那么粗糙:在原始版本中,列表x包含许多0,这些0实际上是无用的、速度较慢的代码,这也很难理解。从本质上讲,pythonlistx被迫像一个C数组:字符串中奇数位数的变量调用列表变量大小,而不是数组固定大小

而且,代码更短的事实使得读写速度更快

正如Jon所建议的,一个更具python风格的版本包括使用列表理解:

def assign(input_string):
    odd_digits = [char for char in input_string if int(char) % 2]  # or: if char in '13579'
    print("The odd digits are", *odd_digits, sep='\n')  # or: ("The odd digits are", odd_digits)

这是一个很好的例子,说明了为什么Python代码的编写和读取速度比C代码快得多。

很有效,谢谢!什么是+=尽管?我从来没有听说过.index+=1相当于index=index+1,但更清晰:你马上就知道index的值只是简单地增加了一些。所以,这基本上是[intch for ch in input_string if ch in'13579']?你的列表理解不应该是[char for char in input_string if intchar%2]?只是好奇。。。如何打印奇数是,*奇数,sep='\n',有效的python代码?它给了我SyntaxError:使用解释器和python 2.7.1的*和'sep'的语法无效-谢谢你,谢谢你!什么是+=尽管?我从来没有听说过.index+=1相当于index=index+1,但更清晰:你马上就知道index的值只是简单地增加了一些。所以,这基本上是[intch for ch in input_string if ch in'13579']?你的列表理解不应该是[char for char in input_string if intchar%2]?只是好奇。。。如何打印奇数是,*奇数,sep='\n',有效的python代码?它给了我SyntaxError:使用解释器和python 2.7.1的*和'sep'的语法无效-谢谢