使用for循环引用列表中的每个项目(而不仅仅是最后一项)

时间:2015-11-19 16:10:02

标签: python

我不明白如何引用列表中的每个项目,而不是仅使用for循环时的最后一项。这是一个简单的程序,我想在一行上打印n - con = new SqlConnection("Data Source=(local);" + "Initial Catalog=NorthwindDB.mdf;Integrated Security=True"); // Or Data Source=.\\sqlexpress; ,其中n是*列表中的每个数字。这是我的代码:

stars

此代码的输出仅为#!/usr/bin/python def histogram(): stars = [10,2,3] for i in stars: char = "*" * i return char print histogram() ***中的最后一个数字)。如何打印每个号码的星星?请使用最简单的语法和解释。

4 个答案:

答案 0 :(得分:3)

实际上,您的函数只返回分配给' char'的最后一个值。 - 此值将是由星组成的单个字符串。你想做的是创建一个连续值的列表,这些值是“char”和“char”之间的关系。在循环的每次迭代中采用:

def histogram():
    stars = [10,2,3]
    return [ "*" * i  for i in stars ]

>>> histogram()
['**********', '**', '***']

>>> print('\n'.join( histogram() ))
**********
**
***

以上将逐行打印出星星,并将列表存储为变量,'明星'。

更快/更清晰的方法是执行相同的操作是列表理解(functional programming结构),它可以动态创建列表:

{{1}}

答案 1 :(得分:2)

问题是,stars中的每个项目都会重新分配char。因此,在histogram()返回时,char等于"*" * stars[-1](列表中的最后一项)。解决此问题的最简单方法是只为char中的每个元素打印stars,而不返回任何内容。

def histogram():
    stars = [10,2,3]
    for i in stars:
        char = "*" * i
        print char

histogram()
  

**********
  **
  ***

如果您希望从直方图返回输出,则可以添加到char,而不是将其分配给新值。为此,我们将char设置为for循环之外的空字符串(''),然后在for循环内部使用char +=(相当于{ {1}})添加到char = char +char是在'\n'中的每个项目之间添加换行符(没有它,所有星星都会在输出中的一行上)。

stars

更简洁的写作方式是:

def histogram():
    stars = [10,2,3]
    char = ''
    for i in stars:
        char += "*" * i + '\n'
    return char

print histogram()

答案 2 :(得分:1)

考虑:

def histogram(li):
    rtr=[]
    for n in li:
        rtr.append('*'*n)

    return rtr

然后你可以做类似的事情:

stars=[10,2,3]
for t in zip(stars, histogram(stars)):
    print('{:4d} {}'.format(*t))

打印:

  10 **********
   2 **
   3 ***

答案 3 :(得分:-1)

#!/usr/bin/python

def histogram():

    stars = [10,2,3]
    stars_str = ""
    for i in stars  :
        stars_str += "*" * i + '\n'

    return stars_str.strip()


print histogram ()