我想删除包含(或不包含)一组特定字符的列表中的所有元素,但是我正在遇到迭代列表并在我继续时删除元素的问题.下面给出两个几乎相同的例子.如您所见,如果要删除的两个元素直接相互跟随,则第二个元素不会被删除.
我确定在python中有一个非常简单的方法可以做到这一点,所以如果有人知道它,请帮助我 - 我正在制作整个列表的副本并迭代一个,并删除其他元素...不我假设一个好的解决方案
>>> l
['1', '32', '523', '336']
>>> for t in l:
... for c in t:
... if c == '2':
... l.remove(t)
... break
...
>>> l
['1', '523', '336']
>>> l = ['1','32','523','336','13525']
>>> for w in l:
... if '2' in w: l.remove(w)
...
>>> l
['1', '523', '336']
Run Code Online (Sandbox Code Playgroud)
弄清楚了:
>>> l = ['1','32','523','336','13525']
>>> [x for x in l if not '2' in x]
['1', '336']
Run Code Online (Sandbox Code Playgroud)
仍然想知道是否有任何方法在使用for l in l时将迭代设置回一组.
我有一个python程序,它打开一个新窗口来显示一些"关于"信息.这个窗口有自己的关闭按钮,我已经使它不可调整大小.然而,最大化和最小化它的按钮仍然存在,我希望它们消失.
我正在使用Tkinter,包装所有信息以显示在Tk类中.
到目前为止的代码如下.我知道它不漂亮,我打算扩展信息使其成为一个类,但我希望在移动之前对此问题进行排序.
任何人都知道如何管理Windows管理器显示哪些默认按钮?
def showAbout(self):
if self.aboutOpen==0:
self.about=Tk()
self.about.title("About "+ self.programName)
Label(self.about,text="%s: Version 1.0" % self.programName ,foreground='blue').pack()
Label(self.about,text="By Vidar").pack()
self.contact=Label(self.about,text="Contact: adress@gmail.com",font=("Helvetica", 10))
self.contact.pack()
self.closeButton=Button(self.about, text="Close", command = lambda: self.showAbout())
self.closeButton.pack()
self.about.geometry("%dx%d+%d+%d" % (175,\
95,\
self.myParent.winfo_rootx()+self.myParent.winfo_width()/2-75,\
self.myParent.winfo_rooty()+self.myParent.winfo_height()/2-35))
self.about.resizable(0,0)
self.aboutOpen=1
self.about.protocol("WM_DELETE_WINDOW", lambda: self.showAbout())
self.closeButton.focus_force()
self.contact.bind('<Leave>', self.contactMouseOver)
self.contact.bind('<Enter>', self.contactMouseOver)
self.contact.bind('<Button-1>', self.mailAuthor)
else:
self.about.destroy()
self.aboutOpen=0
def contactMouseOver(self,event):
if event.type==str(7):
self.contact.config(font=("Helvetica", 10, 'underline'))
elif event.type==str(8):
self.contact.config(font=("Helvetica", 10))
def mailAuthor(self,event):
import webbrowser
webbrowser.open('mailto:adress@gmail.com',new=1)
Run Code Online (Sandbox Code Playgroud) 假设我们有一个大小为49x49x5的矩阵I,对应于沿着第三维堆叠的5个大小为49x49的图像,因此我们总共有5个图像.这些图像应该可视化3D空间中的气体密度,因此我们可以将每个图像视为不同位置的房间的剖面.
有没有办法在MATLAB中制作一个图形,其中所有5个图像都显示为悬挂在它们"来自"的3D空间中?
这是一张希望让我更清楚自己所追求的图像:

我正在用Python编写一个程序,并想让它让操作系统打开当前的工作目录,例如Windows打开explorer.exe并导航到想要的目录.关于如何做到这一点的任何想法?
该目录已由os.getcwd提供.
跨平台方法首选:)
我有几个连接组件的二进制图像,一些大和一些小(可能只有1个像素).有了这个,我正在寻找一种方法,以有效的方式使每个连接的组件成为检查器模式,而不是连接的blob.
到目前为止,我已经提出了两种可以尝试的方法,但它们可能会产生错误,或者效率很低:
我知道整个图像,并可以制作一个检查器模式掩码,以删除50%的像素.这非常快,但平均会删除50%的连接组件,这些组件只占一个像素区域.
使用bwlabel()仅通过施加掩模,以该组件,如果它是在1个像素(而留下其它成分当环路到达它们被认为是),每个连接部件在MATLAB /倍频程,和循环.这可能是非常低效的.
是否可以使用任何智能/内置解决方案?

代码生成图
T = zeros(40,40);
T(10:30,10:30) = 1;
chessVec = repmat([1;0],20,1);
T_wanted = (repmat([chessVec circshift(chessVec,1)],1,20).*T);
figure();
subplot(1,2,1);imshow(T);title('Start shape')
subplot(1,2,2);imshow(T_wanted);title('Wanted shape');
Run Code Online (Sandbox Code Playgroud) 下面是我创建两个向量的时候从我的终端打印输出.有没有人知道为什么第二次调用ones()会发出警告,而第一次没有?
>> p1
p1 =
0.7000
>> p2
p2 =
0.3000
>> whos p1
Name Size Bytes Class Attributes
p1 1x1 8 double
>> whos p2
Name Size Bytes Class Attributes
p2 1x1 8 double
>> N
N =
100
>> T1 = ones(N*p1,1);
>> T2 = ones(N*p2,1);
Warning: Size vector should be a row vector with integer elements.
Run Code Online (Sandbox Code Playgroud) 这就是事情.我试图在Python中使用fsolve函数来查找三次函数的根.这个三次函数有一个参数,deltaW.我要做的就是将此参数改为deltaW从-50到50,并找到三次函数的根在同一时间.以下是我的脚本:
from scipy.optimize import fsolve
import matplotlib.pyplot as plt
import numpy as np
import pylab
g = 5.61
gamma = 6.45
kappa = 6.45
J = 6.45
rs = 1.0 #There are just parameters
m = 5.0*10**(-11)
wm = 2*3.14*23.4
X = []
X1 = []
def func(x): #Define the cubic function I need to solve
A = 1j*g**2*(kappa + 1j*deltaW)*x*x/(m*wm**2)
B = J**2 + (1j*deltaW - gamma)*(1j*deltaW + kappa)
C = …Run Code Online (Sandbox Code Playgroud)