Python 从元组列表中查找特定项
这是我的代码,我想从元组中打印出一个特定的项,我该怎么做 我想打印出2014年12月7日的购买价格。您可以遍历投资组合,检查您要查找的购买日期是否在任何元组中。如果是这样,您可以打印它,前提是购买价格在所有元组中始终处于相同的位置Python 从元组列表中查找特定项,python,python-3.x,Python,Python 3.x,这是我的代码,我想从元组中打印出一个特定的项,我该怎么做 我想打印出2014年12月7日的购买价格。您可以遍历投资组合,检查您要查找的购买日期是否在任何元组中。如果是这样,您可以打印它,前提是购买价格在所有元组中始终处于相同的位置 portfolio= [ ( "Purchase Date:23-Aug-2015", "Purchase Price:43.50", "Shares:25", 'Symbol:CAT', "Current Price:92.45" ), ( "Purc
portfolio= [
( "Purchase Date:23-Aug-2015", "Purchase Price:43.50", "Shares:25", 'Symbol:CAT', "Current Price:92.45" ),
( "Purchase Date:15-Mar-2013", "Purchase Price:42.80", "Shares:50", 'Symbol:DD', "Current Price:51.19" ),
( "Purchase Date:7-Dec-2014", "Purchase Price:42.10", "Shares:75", 'Symbol:EK', "Current Price:34.87" ),
( "Purchase Date:6-Dec-2013", "Purchase Price:37.58", "Shares:100", 'Symbol:GM', "Current Price:37.58" )
]
# loop to iterate over each item in list and print each item out
for a in portfolio:
print (a[0:5])
你最好把你的数据放到字典里,做更干净的查找
for i in portfolio:
if "Purchase Date:7-Dec-2014" in i:
print (i[1])
您需要检查元组中的第一项是否为购买日期:2014年12月7日。如果是,则可以打印元组中的第二项。以下是如何做到这一点:
portfolio = [
{"Purchase Date":"23-Aug-2015", "Purchase Price":43.50, "Shares":25, "Symbol":"CAT", "Current Price":92.45},
{"Purchase Date":"15-Mar-2013", "Purchase Price":42.80, "Shares":50, "Symbol":"DD", "Current Price":51.19},
{"Purchase Date":"7-Dec-2014", "Purchase Price":42.10, "Shares":75, "Symbol":"EK", "Current Price":34.87},
{"Purchase Date":"6-Dec-2013", "Purchase Price":37.58, "Shares":100, "Symbol":"GM", "Current Price":37.58}
]
for data in portfolio:
if data["Purchase Date"] == "7-Dec-2014":
print(data["Purchase Price"])
这段代码相当笨拙,既不是Pythonic,也不美观。表示这些数据的更自然的方法是使用字典,或者更具体地说,使用字典字典。我将使用事务日期作为对应于该日期的事务数据的键
portfolio= [
( "Purchase Date:23-Aug-2015", "Purchase Price:43.50", "Shares:25", 'Symbol:CAT', "Current Price:92.45" ),
( "Purchase Date:15-Mar-2013", "Purchase Price:42.80", "Shares:50", 'Symbol:DD', "Current Price:51.19" ),
( "Purchase Date:7-Dec-2014", "Purchase Price:42.10", "Shares:75", 'Symbol:EK', "Current Price:34.87" ),
( "Purchase Date:6-Dec-2013", "Purchase Price:37.58", "Shares:100", 'Symbol:GM', "Current Price:37.58" )
]
for transaction in portfolio:
if transaction[0] == "Purchase Date:7-Dec-2014":
print(transaction[1])
以下是使用字典实现相同目标的方法:
transactions = {
'23-Aug-2015' : { 'Purchase Price' : 43.50, 'Shares' : 25, 'Symbol' : 'CAT', 'Current Price': 92.45 },
'15-Mar-2013' : { 'Purchase Price' : 42.80, 'Shares' : 50, 'Symbol' : 'DD', 'Current Price': 51.19 },
'7-Dec-2014' : { 'Purchase Price' : 42.10, 'Shares' : 75, 'Symbol' : 'EK', 'Current Price': 34.87 },
'6-Dec-2013' : { 'Purchase Price' : 37.58, 'Shares' : 100, 'Symbol' : 'GM', 'Current Price': 37.58 }
}
这允许您访问数据,而无需对字符串进行任何特殊的解析。您使用了错误的数据结构。您应该使用字典来完成此任务。使用in检查元组的第一个元素效率很低,对于不是整数值的循环变量来说,i是一个非常糟糕的名称。@BlackJack感谢您的评论。关于为什么我经常被用来命名循环变量,有很多意见。我的理解是,i、j和k通常用于迭代变量。至于成员资格测试,我相信在元组和列表中基本相同。I、j和k通常用于数学中的下标,并且几乎总是∊ℕ 这就是为什么它们被用作循环变量,用作数组的索引。对于更复杂的事物有这样一个名字,对读者来说是一个令人讨厌的惊喜。除此之外,对于投资组合中的某些东西来说,这也是一个可怕的名字,因为它在这种情况下没有任何意义。是的,元组和列表的成员资格测试是相同的。那又怎么样?这仍然是错误的低效操作,因为它测试每个元素,而您只需要比较第一个元素。
# For every key and value pair in transactions
for k, v in transactions.iteritems():
# If we find a key with December 7th, 2014 as the date
if k == '7-Dec-2014':
# Print the purchase price of the transaction from that date.
print v['Purchase Price']