[英]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_from
, col_to
和col_amount
列表。 从循环中打印值可能会使您误以为所有值都将存储在该列表中。 尝试在for循环外调用print(col_from, col_amount, col_to)
,您只会得到最后一个元素。 更好的方法是创建空列表并append
项目。
其次,我认为您应该注意int和float的数据格式,但是csv.DictReader
将返回矩阵中所有元素的字符串。
然后,使用列表col_to
很容易地检查col_from
值col_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.