Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从元组列表中查找特定项_Python_Python 3.x - Fatal编程技术网

Python 从元组列表中查找特定项

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

这是我的代码,我想从元组中打印出一个特定的项,我该怎么做

我想打印出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" ) 
] 

# 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']