我正在用Python编写一个程序,该程序从文件中读取库数据并将其存储在数据结构中,以便以后输出。
我有一个存储交易的列表,如
D,520,W,20,D,100
如果信件是交易类型(提款或存款),则数字是金额。
我有一个可以计算余额的for循环,但是我无法进入下一个元素。
基本上我想做的是:
for item in theList:
if item == 'D':
balance = balance + int(NEXT_ITEM)
if item == 'W':
balance = balance - int(NEXT_ITEM)
感谢您的帮助
答案 0 :(得分:2)
data = 'D,520,W,20,D,100'.split(',')
def pairs(lst):
it = iter(lst)
return zip(it, it)
balance = 0
for trans,amt in pairs(data):
if trans == 'D':
balance += int(amt)
else:
balance -= int(amt)
print(balance)
答案 1 :(得分:1)
data = 'D,520,W,20,D,100'.split(',')
it = iter(data)
balance = sum({'W': -1, 'D': +1}[item] * int(next(it)) for item in it)
print(balance)
创建一个迭代器并迭代它。然后,您可以致电next
获取下一个项目。
或者不需要next
,通过zip
配对列表中的项目:
data = 'D,520,W,20,D,100'.split(',')
balance = sum({'W': -1, 'D': +1}[a] * int(b) for a, b in zip(data[::2], data[1::2]))
print(balance)
或者按照你的例子:
theList = 'D,520,W,20,D,100'.split(',')
theIterator = iter(theList)
balance = 0
for item in theIterator:
if item == 'D':
balance = balance + int(next(theIterator))
if item == 'W':
balance = balance - int(next(theIterator))
print(balance)
答案 2 :(得分:1)
这是一个简单的方法。
for i, v in enumerate(l):
if v == 'D':
balance = balance + int(l[i+1])
或者只是一次阅读两个项目:
for i in range(0, len(l), 2):
sl = l[i:i+2]
if sl[0] == 'W':
balance = balance - int(sl[1])
答案 3 :(得分:0)
如果您的数据是事务类型代码和事务数量对,则自然数据类型是字典列表或元组列表。或者如果你愿意,可以命名为元组。其他答案显示了如何解决您对平面列表的选择,但我认为最好的解决方法是将相关元素捆绑在您从文件创建的列表中:
data = [('D', 520), ('W', 20), ...]
或者,如果您的数据如此处所示那么简单,则是已签名号码的列表。可能是decimal.Decimal
类型,除非你只处理全部美元。
我假设您的描述中从您的文件中创建列表是在您的控制之下。如果没有,我认为Hugh Bothwell的答案是最简洁的调整方式。