对于列表中的索引

For index in list

我正在努力寻找如何将减法的答案简化为小数点后两位。将 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)

当我 运行 它处于空闲状态时,我收到以下信息:

>>> 
[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]

这应该有效:

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

你对 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)]

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

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)

我使用列表理解来简化操作

当你

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

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

你会想要像下面这样的东西

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

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

其中 xrange(len(Timestaken)) returns 一个产生 0, 1, ... len(Timestaken)-1

的生成器

更多 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']
>>>