我是python的新手。
我有两个不同的列表
#include <stdio.h>
// *********************************************************
// Implementation file PQ.cpp for the ADT priority queue.
// A heap represents the priority queue.
// *********************************************************
#include "PQ.h" // header file for priority queue
bool pqClass::PQueueIsEmpty() const
{
return H.HeapIsEmpty();
} // end PQueueIsEmpty
void pqClass::PQueueInsert(const pqItemType& NewItem,
bool& Success)
{
H.HeapInsert(NewItem, Success);
} // end PQueueInsert
void pqClass::PQueueDelete(pqItemType& PriorityItem,
bool& Success)
{
H.HeapDelete(PriorityItem, Success);
} // end PQueueDelete
pqItemType pqClass::peek() const throw(PrecondViolatedExcep) {
try
{
return H.peekTop();
}
catch (PrecondViolatedExcep e) {
throw PrecondViolatedExcep("Attempted peek into an empty priority queue."); } // end try/catch
} // end peek
// End of implementation file.
在列表A中,它在第5位和第5位具有值。所以我想得到位置5和5的相应值(3和0)。列表B中的6。
那么请你就此提出一些建议。
提前致谢。
答案 0 :(得分:1)
使用enumerate和list_comprehension。
>>> A = [0,0,0,0,0,20,40,0]
>>> B = [0,0,0,0,0,3,0,0]
>>> [B[i] for i,j in enumerate(A) if j != 0]
[3, 0]
>>> [B[i] for i,j in enumerate(A) if j]
[3, 0]
答案 1 :(得分:0)
只需遍历列表并检查非零值。
A = [0,0,0,0,0,20,40,0]
B = [0,0,0,0,0,3,0,0]
j = 0
for item in A:
if item != 0:
temp = B[j]
print(temp)
j = j+1
else:
j = j+1
输出:
3 0
答案 2 :(得分:0)
列表推导的解决方案很好,但对于初学者来说很难阅读。使用j迭代器的解决方案很好,但您可以使用内置的enumerate()
函数执行相同的操作。
A = [0,0,0,0,0,20,40,0]
B = [0,0,0,0,0,3,0,0]
for index, val in enumerate(A):
if val != 0:
temp = B[index]
print(temp)
输出30
答案 3 :(得分:0)
>>> A = [0,0,0,0,0,20,40,0]
>>> B = [0,0,0,0,0,3,0,0]
>>> [j for i, j in zip(A, B) if i]
[3, 0]