我有一个列表,其中包含许多具有固定数量元素的列表:
info = [['N', 100, 'A'], ['O', 99, 'A'], ['C', 105, 'A'], ...]
我想找到包含'N'
和100
的元素的索引,即0
。我尝试过这样的东西来获取元素本身:
matches = [a for name in a[2] and resnum in a[5] for a in info]
哪个不起作用。有没有办法用列表推导来做到这一点?
答案 0 :(得分:2)
您可以使用next()
和enumerate()
:
>>> next(i for i, (a, b, _) in enumerate(info) if a == 'N' and b == 100)
0
>>> next(i for i, (a, b, _) in enumerate(info) if a == 'C' and b == 105)
2
请注意,如果没有匹配,next()
会抛出StopIteration
例外 - 您可以使用try/except
处理它,也可以提供默认值 ,-1:
>>> next((i for i, (a, b, _) in enumerate(info) if a == 'invalid' and b == 0), -1)
-1
_
是一种命名throwaway variables的规范方式(在这种特殊情况下,我们不需要子列表的第三个值)。
答案 1 :(得分:2)
如果你想修复你的列表理解,那应该这样做:
$conn1= new mysqli($db_conn_server, $db_conn_username, $db_conn_password, $db_conn_dbname);
if ($conn1->connect_error) { $conn1->close();
$conn2= new mysqli($db_conn_server, $db_conn_username, $db_conn_password, $db_conn_dbname);
$sms_sys_query2 = "INSERT INTO `sms_messages_tbl` (`session_unq_id`)
VALUES ('$transaction_request_to_api_code')";
if ($conn2->query($sms_sys_query2) === TRUE) { $conn2->close(); exit();
} else { $conn2->close(); exit(); }
}else {
$sms_sys_query1 = "INSERT INTO `sms_messages_tbl` (`session_unq_id`)
VALUES ('$transaction_request_to_api_code')";
if ($conn1->query($sms_sys_query1) === TRUE) { $conn1->close(); exit();
} else { $conn1->close(); exit(); }
}