【问题标题】:Python: Dynamically inserting user defined data to 2 dimensional listPython:将用户定义的数据动态插入二维列表
【发布时间】:2019-01-13 05:07:44
【问题描述】:

我正在尝试为供应商的每周销售量创建一个表格,如下所示:

Monday    Tuesday    Wednesday    
50        80         10
54        98         7
29        40         80

我正在尝试让用户插入每日销售额,这是我目前所拥有的:

weekly_sales_list = [['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', []]]

    for i in range(len(weekly_sales_list)):
        for j in range(len(weekly_sales_list[i])):
            weekly_sales_list[i][j] = input('input value for ' + weekly_sales_list[i][j])
    print(weekly_sales_list)

我不确定这是否是设置二维列表的最佳方式,并且我还收到以下错误:

TypeError: can only concatenate str (not "list") to str

任何帮助将不胜感激

【问题讨论】:

  • weekly_sales 的目的是什么?其余代码从不使用它。
  • 它使用weekly_sales_list,你应该把它放在问题中。
  • 我认为你想要for day_sales in weekly_sales_list,你不应该使用range(len(str(...)))
  • 您发布的代码中似乎存在缩进错误。
  • 这是最少的问题,可能只是复制错误。

标签: python list multidimensional-array


【解决方案1】:

使用字典,以周名作为键,以该周的数据作为值。

import itertools
data = {'Monday':[],
        'Tuesday':[],
        'Wednesday':[],
        'Thursday':[],
        'Friday':[],
        'Saturday':[],
        'Sunday':[]}
while 1:
    info = input('Enter day and value (e.g. "Monday 26") or nothing to stop: ')
    if not info:
        break
    k,v = info.split()
    data[k].append(v)

然后通过显示表头打印表格:

print(*(f'{day:<10}' for day in data))

最后,转置您的数据,使用itertools.zip_longest 处理值比其他值少的日期:

for group in itertools.zip_longest(*data.values(), fillvalue=''):
    print(*(f'{value:<10}' for value in group))

示例输入:

Enter day and value (e.g. "Monday 26") or nothing to stop: Monday 3
Enter day and value (e.g. "Monday 26") or nothing to stop: Monday 4
Enter day and value (e.g. "Monday 26") or nothing to stop: Monday 5
Enter day and value (e.g. "Monday 26") or nothing to stop: Tuesday 6
Enter day and value (e.g. "Monday 26") or nothing to stop: Tuesday 7
Enter day and value (e.g. "Monday 26") or nothing to stop: Wednesday 8
Enter day and value (e.g. "Monday 26") or nothing to stop: Thursday 9
Enter day and value (e.g. "Monday 26") or nothing to stop:

示例结果:

Monday     Tuesday    Wednesday  Thursday   Friday     Saturday   Sunday
3          6          8          9
4          7
5

【讨论】:

    【解决方案2】:

    使用问题中的列表,稍微改变结构:

    weekly_sales_list = [['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],[]]
    

    定义从用户那里收集数据的方法(from random import randint 用于模拟):

    def ask_for_input(n):
      tmp = []
      for i in range(7):
          # user_input = input('input value for ' + weekly_sales_list[0][i])
          # print('input value for ' + weekly_sales_list[0][i])
          user_input = randint(0,2) # to simulate user input (from random import randint)
          tmp.append(user_input)
      weekly_sales_list[1].append(tmp)
    

    循环询问用户输入:

    for n in range(3):
      # print('week - ' + str(n) )
      ask_for_input(n)
    

    准备打印数据和表格:

    tot_per_day = [sum(col) for col in zip(*weekly_sales_list[1])]
    tot_per_day = tot_per_day + [sum(tot_per_day)]
    headers = weekly_sales_list[0] + ['total']
    row_format ="{:>12}"*9
    

    然后打印出来:

    print (row_format.format("", *headers))
    for row in weekly_sales_list[1]:
      print (row_format.format("", *(row + [sum(row)])))
    print ("-"*12*9)
    print (row_format.format("", *tot_per_day))
    

    这是随机结果:

    # Monday     Tuesday   Wednesday    Thursday      Friday    Saturday      Sunday       total
    #      0           1           1           0           2           0           1           5
    #      1           2           0           2           0           0           1           6
    #      1           2           0           0           1           0           2           6
    # ------------------------------------------------------------------------------------------
    #      2           5           1           2           3           0           4          17
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多