S0=['S1','S2','S3']
P=[]
def du(S0,P):
for i in range(len(S0)):
def d(S0[i]):
d=0
for n in range(len(P)):
if S0[i] in P[n]:
d=d+1
return d
if d(S0[i])==0:
......
这里我想以 S0[i]
作为 d()
的参数,请问怎样可以实现以带下标的 list 作为函数参数? 或者有什么可以替代的方法?。
这个 d()
函数是要对 S0
中的每个元素进行分析的,我是想做一个简单的多边形拓扑关系的程序,要计算每条边(也就是 S0[i]
)的度,当度大于 2 时把这条边从 S0
里删掉。
这里用 range
而不是直接 for i in list
是因为在另一个list中还要用到相同的下标位置,然后 P
也用 range
是因为 P
里边还有 list。
好像按@yooz_hardy所说的用 enumerate
可以解决我的问题了,还有什么更好的方法或者优化建议欢迎指出。
现在下标的问题已经弄清楚了,但是有关我这个多边形拓扑关系建立的作业又有了别的问题:
A=['S3','S2','S1']
B=['S4','S6','S1']
C=['S2','S5','S4']
D=['S3','S6','S5']
N=[A,B,C,D] #节点表,每个点记录顺时针方向排序的弧段
N0=['A','B','C','D'] #节点的字符表
S1=['A','B']
S2=['C','A']
S3=['D','A']
S4=['B','C']
S5=['C','D']
S6=['B','D']
S=[S1,S2,S3,S4,S5,S6] #弧段表,每个弧段含有起始点和终点
S0=['S1','S2','S3','S4','S5','S6'] #弧段的字符表
P=[]
def du(Si,P): #定义弧段的‘度’,弧段属于一个多边形度就加一
d=0
for Pi in P:
if Si in Pi:
d=d+1
return d
for i,Si in enumerate(S0):
for j,Nj in enumerate(N0):
if du(Si,P)==1: #如果某弧段度等于1,将其从弧段表中删去
S0.remove(Si)
S.remove(S[i])
elif du(Si,P)==2: #如果某弧段度等于2,将其从节点的弧段排序中删去
N[j].remove(Si)
else:
Pc=[Si] #建立当前多边形
Sc=Si #当前边
Ns=S[i][0] #起点
Nc=S[i][1] #当前点
while Ns != Nc:
k=N0.index(Nc)
p=N[k].index(Sc) #寻找当前点字符对应的节点,并在结点表中找到当前边位置
p1=p+1 #当前边在表中下一条边的位置
if p1 > len(N[k]):
i_p1=0
Sc=N[k][p1] #把下一条边设为当前边
Pc.append(Sc) #把新的当前边加入多边形中
n=S0.index(Sc)
Nc=S[n][1] #新当前点
P.append(Pc) #起点终点重合时将当前多边形放入多边形组中
问题:
1.忽略了左多边形和右多边形,左多边形的新当前点为S[n][1]
,右多边形新当前点为S[n][0]
,这个可以先做个if
看原本的当前点在新的当前弧中的位置,再确定是左还是右
2.但是多边形组'P'的结构不知道怎么设置比较好,如果在每个多边形里再分L
,R
两个分组会不会太复杂(起始边可以默认放在左多边形里)
3.节点表和弧段表每个都有对应的字符表,下边运算的时候还要找相应位置进行处理,挺麻烦,有没有什么函数直接把list的子集名变为字符?或者有什么更好的结构?
阿神2017-04-17 17:50:57
현재 정보를 토대로 참고하실 수 있는 작성 방법은 다음과 같습니다.
으아악다른 여러 사람들이 유용한 제안을 많이 했습니다. 제가 제안한 또 다른 제안은 변수 이름을 지정할 때 의미 있는 이름을 지정하여 코드를 읽는 사람들이 의미를 더 빨리 이해할 수 있도록 하는 것입니다.
P.S. 처음 질문을 살펴보니 Python의 함수 정의, 호출, 매개변수 등에 대해 잘 모르실 수도 있습니다. 이해하기 어려운 부분이 있으면 이번 기회에 이해해 보시기 바랍니다. 여기서 가능합니다. 최대한 명확하게 질문해 주세요. 도와드리겠습니다. 행운을 빕니다!
巴扎黑2017-04-17 17:50:57
질문자가 형식 매개변수와 실제 매개변수의 차이를 이해하지 못할 수도 있습니다
루프에서 함수를 정의하지 마세요.
range(len(blabla))는 Python 방식의 작성 방식이 아닙니다.
Python의 목록 자체는 반복을 지원하므로 "for i in LIST"를 사용할 수 있습니다.
'목록 분석'을 사용하면 코드를 단순화할 수 있습니다.
변수명/함수명...이해가 안되네요.