我已经很长时间没有学习Python了,而且有点生疏,但对于第一个问题,我正在使用一本字典,需要将它相交以返回键和值。例如,我要输入
a = {1:'a1', 2.5:'a2', 4:'a3'}
b = {1:'a1', 3:'a2', 5:'a4'}
Run Code Online (Sandbox Code Playgroud)
如果我进入c = intersect(a,b),我希望它返回{1:'a1'},但我只能返回{'a1'}。
到目前为止我的代码是:
def intersect(a, b):
for i in a:
if j in b:
if a[i]==b[i]:
return ({i})
else:
return {}
Run Code Online (Sandbox Code Playgroud) 目标是找到两个数组的交集。我知道你应该使用集合来获得更快的运行时间。然而,在我的笔记本中,我惊讶地发现使用 set 方法我的运行时间并没有更快。(89 毫秒(阵列)与 220 毫秒(组))。我的代码有问题还是我误解了?
A = range(50,1000000)
B = range(-1000000,60)
%%time
# O(m*n)?
def intersection(A, B):
array = []
for i in A:
if i in B:
array.append(i)
return array
intersection(A,B)
%%time
# O(1)?
def intersection(A, B):
set_a = set(A)
set_b = set(B)
return [i for i in set_a if i in set_b]
# return set_a.intersection(set_b)
intersection(A,B)
Run Code Online (Sandbox Code Playgroud) 让两个{A,B}大小的数组1xN
我想找到相同指数的案例数量
条件A(ii)==1 & B(ii)==0得到满足.
我试过了
casess= intersect( find(A==1),find(B==0 ))
Run Code Online (Sandbox Code Playgroud)
但这很慢.
我相信这是因为intersect检查每个成员是否是另一个成员的成员,但我仍然在寻找解决我的小问题的最快解决方案.
我试图理解为什么我的交集在运行此代码时不返回空列表.
n = ([1,2,3,4,5],[3,4,5,6],[5,6,7],[7,8,9,10,11,12],[10,22,33,44,45])
w = set(n[0]).intersection(*n[:1])
print(w)
#Returns (1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)
但是,这会返回正确的集合
n = ([1,2,3,4,5],[3,4,5,6],[5,6,7],[7,8,9,10,11,12],[10,22,33,44,45])
w = set(n[0]).intersection(*n)
print(w)
#Returns empty set.
Run Code Online (Sandbox Code Playgroud)
这个问题给出了两个正确的结果:
Python - 多个列表的交叉?
当我将第一组与剩余列表进行比较时,为什么我得不到正确的结果?
我有两个不同大小的矩阵,例如:
A = [10 12 15 16 17 43 77];
B = [10 11 15 20 43 55 222 90 86];
Run Code Online (Sandbox Code Playgroud)
我想比较这两个矩阵以找出相同的值并将它们存储在一个新变量中.结果应如下所示:
C = [10 15 43];
Run Code Online (Sandbox Code Playgroud)
因为我是MATLAB的新用户,如果有人给我关于这个问题的想法会很好.提前致谢.
我有以下代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
// your code goes here
int t;
cin>>t;
while(t--)
{
string a;
string b;
cin>>a;
cin>>b;
vector<char> v1(a.begin(),a.end());
vector<char> v2(b.begin(),b.end());
sort(v1.begin(),v1.end());
sort(v2.begin(),v2.end());
vector<char> c;
auto ls = set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),c.begin());
cout<<"hello"<<endl;
cout<<ls-c.begin()<<endl;
cout<<c.size()<<endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在 set_intersection 线之后没有打印任何内容,甚至没有与相交线无关的“hello”,为什么?
我正在使用std::set<int>多集类std::multiset<int>来执行一些集合操作 - 并集、交集等。问题是我必须在两个多集之间执行交集,这样我也可以获得重复值。当我将它与简单集合(而不是多集合)一起使用时,交集工作正常,例如
Set1={1,2,3,4,5,6}
Set2={4,5,6,7,8,9}
然后
std::set_intersection 给我一个正确的结果,即 {4,5,6}
但是,如果我有一个多重集
多组1{1,1,2,2,3,3,4,4,5,5,6,6}
多组2{4,4,5,5,6,6,7,7,8, 8,9,9}
我再次使用 std::set_intersection 它再次给我结果 {4,5,6}
这是不正确的,因为实际的交集是 {4,4,5,5,6,6}
尽管我使用多重集来保存交集的结果,但我仍然得到错误的答案。
谁能告诉我如何解决这个问题。
python ×3
c++ ×2
matlab ×2
set ×2
arrays ×1
dictionary ×1
multiset ×1
optimization ×1
python-3.x ×1
stl ×1