繁体   English   中英

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

[英]How to check number exist or not in python for loop

我有这种格式的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')

例如,在“来自列”中,我现在找到值314,我如何才能检查“到列”的所有值是否存在此值。实际上,我想计算往返于所有帐户的当前余额。

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

我给你看起来像这样。

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

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

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

然后,使用列表col_to很容易地检查col_fromcol_from也出现在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]

假设您能够成功地将'to'和'from'列中的值存储在列表中,则可以对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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM