【问题标题】:For index in list对于列表中的索引
【发布时间】:2015-11-12 16:12:11
【问题描述】:

我正在努力寻找如何将答案从减法简化到小数点后 2 位。减去 Enter 和 Leave 这两个列表,因此我可以得到汽车从 A 点到 B 点所需的时间。

Enter=[7.12,
       7.15,
       7.24,
       7.45,
       7.28,
       7.31,
       7.18,
       7.25,
       7.33,
       7.38]

Leave=[7.56,
       7.24,
       7.48,
       7.52,
       7.45,
       7.57,
       7.22,
       7.31,
       7.37,
       7.41]

Timestaken=[]

for enter_data, leave_data in zip(Enter, Leave):
    Timestaken.append(leave_data-enter_data)

print (Timestaken)

for index in Timestaken:
    Timestaken[index]="%.2f" % Timestaken[index]

print(Timestaken)

当我在 IDLE 中运行它时,我收到以下信息:

>>> 
[0.4399999999999995, 0.08999999999999986, 0.2400000000000002, 0.0699999999999994, 0.16999999999999993, 0.2600000000000007, 0.040000000000000036, 0.05999999999999961, 0.040000000000000036, 0.03000000000000025]
Traceback (most recent call last):
  File "M:\Task 2 Testing.py", line 46, in <module>
    Timestaken[index]="%.2f" % Timestaken[index]
TypeError: list indices must be integers, not float

我需要这方面的帮助:

for index in Timestaken:
    Timestaken[index]="%.2f" % Timestaken[index]

【问题讨论】:

    标签: python for-loop indexof


    【解决方案1】:

    这应该可行:

    for value in Timestaken:
        print("%.2f" % value)
    

    【讨论】:

      【解决方案2】:

      更多pythonic:

      >>> enter = [7.12, 7.15, 7.24, 7.45, 7.28, 7.31, 7.18, 7.25, 7.33, 7.38]
      >>> leave = [7.56, 7.24, 7.48, 7.52, 7.45, 7.57, 7.22, 7.31, 7.37, 7.41]
      
      >>> timestaken=["%.2f" % (leave_data-enter_data) for enter_data, leave_data in zip(enter, leave)]
      >>> print (timestaken)
      ['0.44', '0.09', '0.24', '0.07', '0.17', '0.26', '0.04', '0.06', '0.04', '0.03']
      >>> 
      

      【讨论】:

        【解决方案3】:

        你对index值有错误的假设

        for index in Timestaken:
        

        此代码将遍历Timestaken 列表的所有,而不是其索引:

        In [9]: [index for index in Timestaken]
        Out[9]:
        [0.4399999999999995,
         0.08999999999999986,
         0.2400000000000002,
         0.0699999999999994,
         0.16999999999999993,
         0.2600000000000007,
         0.040000000000000036,
         0.05999999999999961,
         0.040000000000000036,
         0.03000000000000025]
        

        如果您真的想要索引和值,请使用enumerate

        In [10]: [(index,value) for index,value in enumerate(Timestaken)]
        Out[10]:
        [(0, 0.4399999999999995),
         (1, 0.08999999999999986),
         (2, 0.2400000000000002),
         (3, 0.0699999999999994),
         (4, 0.16999999999999993),
         (5, 0.2600000000000007),
         (6, 0.040000000000000036),
         (7, 0.05999999999999961),
         (8, 0.040000000000000036),
         (9, 0.03000000000000025)]
        

        使用您的代码:不需要那些appendsand 重新格式化

        times_taken = [leave_data-enter_data for enter_data, leave_data in zip(Enter, Leave)]
        
        
        print (times_taken)
        
        times_taken_float = ["{%.2f}".format(value) for value in times_taken]
        
        print (times_taken_float)
        

        我使用列表推导来简化操作

        【讨论】:

          【解决方案4】:

          当你这样做时

          for index in Timestaken:
              Timestaken[index]="%.2f" % Timestaken[index]
          

          您使用的是 Timetaken 列表中的值,而不是这些值的索引

          你会想要类似下面的东西

          for index in xrange(len(Timestaken)):
              Timestaken[index]="%.2f" % Timestaken[index]
          

          此方法适用于 python 2.x,如果您使用的是 python 3.x,请使用 range 而不是 xrange

          其中xrange(len(Timestaken)) 返回一个生成器,产生 0, 1, ... len(Timestaken)-1

          【讨论】:

          • Traceback (most recent call last): File "M:\Task 2 Testing.py", line 45, in &lt;module&gt; for index in xrange(len(Timestaken)): NameError: name 'xrange' is not defined
          • 我想,我应该问一下你运行的是什么版本的 python。我相信xrange 在 2.x 中有效,而在 3.x 中它只是 range
          • 啊,对不起。不包括python版本是我的坏事。也谢谢!
          猜你喜欢
          • 2021-08-23
          • 2015-07-24
          • 2011-08-26
          • 2017-08-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多