并排打印未知尺寸的清单

时间:2013-01-25 17:16:57

标签: python arrays list loops dictionary

我有多组配对列表存储在词典“日期”和“价格”中。 列表是未知的大小,但我想将它们并排打印,如下所示:

date_value1 price_value1 date_value2 price_value 2  

此时此刻,我只能依次打印,如:

for i in range(len(cities)):
    for j,k in zip(dates[i],prices[i]):
        print str(i) + " ; " +  j.text +" ; "+ k.text

我试图让它做我想做的事情:

a = {}
for i in range(len(cities)):
    for j,k in zip(dates[i],prices[i]):
        print str(i) + " ; " +  j.text +" ; "+ k.text
        try:     a[i] = a[i-1] + " ; " + j.text +" ; "+ k.text
        except:  a[i] = " ; " + j.text +" ; "+ k.text

for i in a[len(cities)-1]:
    print a  

但它确实有其他完全不同的东西,我真的无法弄明白。

你能帮忙吗?感谢。


这就是我修复代码的方法。谢谢F.J

a = 100000
for i in xrange(len(citynames)):
    if len(precos[i]) < a: a = len(precos[i])
    print citynames[i], " ; "," ; ",
print    

for j in xrange(a):
    for i in xrange(len(citynames)):      
        print datas[i][j].text, " ; " ,precos[i][j].text, " ; ", 
    print

2 个答案:

答案 0 :(得分:2)

因此,我认为你在这里缺少的关键部分是如何在不自动添加换行符的情况下进行打印,只需在末尾添加,,例如:

for i in range(len(cities)):
    for j,k in zip(dates[i],prices[i]):
        print str(i) + " ; " +  j.text +" ; "+ k.text,
    print

内部print循环内的每个for语句都会附加一个空格而不是换行符。内部for循环之后的print语句只是打印换行符,所以在新行开始的下一次迭代中(不确定是否需要)。

但是,更好的选择是使用str.join()来构建要打印的整个字符串。例如:

for i in range(len(cities)):
    print ' '.join(str(i)+" ; "+j.text+" ; "+k.text for j, k in zip(dates[i], prices[i]))

请注意,我不知道这是否是您想要的确切格式,但您应该能够根据需要进行调整。

答案 1 :(得分:1)

另一个答案有效,但如果我在代码审查中看到这一点,我会将此答案留作评论:

格式化数据,然后呈现它。

创建一个行列表,按您希望的方式格式化。然后打印行。这种方法也更容易测试,更易读和解耦。

def append_to_rows(city, dates, prices, row):
  for date, price in zip(dates, prices):
    row.append(' ; '.join([city, date.text, price.text]))


def print_rows(rows):
  for row in rows:
    print row


def print_data(cities, prices, dates):
  rows = []
  for city in cities:
    append_to_rows(city, dates[city], prices[city], rows)
  print_rows(rows)

测试:

class Text(object):
  def __init__(self, text):
    self.text = text


cities = ['new york', 'san francisco', 'los angeles']
dates = {
  'new york': [
    Text('2008'),
    Text('2009'),
   ],
  'san francisco': [
    Text('2008'),
   ],
  'los angeles': [
    Text('2008'),
    Text('2009'),
    Text('2010'),
   ],
}
prices = {
  'new york': [
    Text('$500'),
    Text('$600'),
   ],
  'san francisco': [
    Text('$400'),
   ],
  'los angeles': [
    Text('$300'),
    Text('$400'),
    Text('$500'),
   ],
}

>>> print_data(cities, dates, prices)
new york ; 2008 ; $500
new york ; 2009 ; $600
san francisco ; 2008 ; $400
los angeles ; 2008 ; $300
los angeles ; 2009 ; $400
los angeles ; 2010 ; $500