如何在python for循环中检查数字是否存在

时间:2017-09-11 10:50:14

标签: python csv math

我有一张这种格式的Excel表格:

from    amount  to

314 $470.21 275

12  $1,788.98   149

316 $2,949.53   417

5   $2,193.48   454

198 $1,402.76   371

82  $1,212.14   420

222 $1,167.72   396

并使用for循环渲染所有csv数据:

import csv

def csv_data(path):
    with open(path) as csv_file:
        readCSV = csv.DictReader(csv_file)

        for line in readCSV:
            col_from = line['from']
            col_to = line['to']
            col_ammount = line['amount']
            print(col_from, col_amount, col_to)

csv_data('transactions.csv')

例如在“from column”中我发现值314现在如何检查“到列”的所有值,该值是否存在。实际上我想计算所有帐号的当前余额。

如何在for循环中正确添加条件?

3 个答案:

答案 0 :(得分:0)

我给你的是这样的......

for line in readCSV:
    if line['form']:
        #do something if "from" exist
    else:
        #do something if "from" do not exit
    if line['to']:
        # do something if "to" exist
    else:
        # do something if "to" do not exit
    if line['amount']:
        #do something if "amount" exist
    else:
        #do something if "amount" do not exist

答案 1 :(得分:0)

我认为您的主要问题是您一遍又一遍地覆盖col_fromcol_tocol_amount列表。从循环中打印值可能会让您误以为所有值都将存储在该列表中。尝试并在for循环外调用print(col_from, col_amount, col_to),您将只获得最后一个元素。更好的方法是创建空列表和append项目。

其次我认为你应该介意int和float的数据格式,但csv.DictReader将返回矩阵中所有元素的字符串。

然后,检查col_from的{​​{1}}值是否也出现在col_to中,这很容易通过列表理解来完成。您可以为条件适用的所有行创建一个包含“True”的列表,如果不符合,则为“False”(所有样本数据都是如此)。

接近您的解决方案的建议是:

import csv

def csv_data(path):
    with open(path) as csv_file:
        readCSV = csv.DictReader(csv_file, delimiter=";", quoting=csv.QUOTE_NONE) # supposed that your delimiter is ";", otherwise use , or \tab

        col_from, col_to, col_amount = [], [], [] # initialize empty lists

        for line in readCSV: # append entries to your lists
            col_from.append(int(line['from']))
            col_to.append(int(line['to']))
            col_amount.append(float(line['amount']))

        bool_list = [True if col_from[i] in col_to else False for i in range(len(col_from))] # A list with Trues and Falses
        return bool_list

print csv_data('transactions.csv')
# out: [False, False, False, False, False, False, False]

答案 2 :(得分:0)

假设您已成功存储来自'的值。和'来自'列表中的列,您可以在2个列表上执行交集操作,以获取列表中存在的所有常用值。

col_from = [314, 12, 316, 5, 198, 82, 222]
col_to = [275, 149, 417, 454, 371, 420, 396]
intersection = list(set(col_from) & set(col_to))

现在intersection应该包含列表中的所有公共值,在这种情况下将是一个空列表。您也可以通过稍微修改来搜索特定值

list(set([314]) & set(col_to))