Python Lists [ ] [SOLVED]

On 17/12/2014 at 07:31, xxxxxxxx wrote:

Say I have three Lists:

list_A = [(1,2,3,4,5), (1,2,3,4,5)]
      list_B = [(1,2,6,7,5), (1,2,6,7,5)]
      list_C = [ ]

1]  I want to compare "list_A" and "list_B"
2]  Then append  "list_C" by taking the duplicates and turn them to "0"

list_C = [(0,0,6,7,0),(0,0,6,7,0)]

I have tried set(list_A) - set(list_B) to compare but it doesn't work

Any help please 😢

On 17/12/2014 at 08:02, xxxxxxxx wrote:

This is how I would do it by comparing the same index of each list:

list_A = [1,2,3,4,5]
list_B = [1,2,6,7,5]
list_C = [ ]
  
for i in range(len(list_A)) :
    if list_A[i] == list_B[i]:
        list_C.append(0)
    else:
        list_C.append(list_B[i])
  
print list_C

On 17/12/2014 at 08:09, xxxxxxxx wrote:

@ShawnFrueh

I have update my post a little, sorry 😊

I will take a look if your solution works tonight, thanks

On 17/12/2014 at 12:09, xxxxxxxx wrote:

To explain better I want to achieve this.
This script is to move certain points of my cube with python but this script is a little long and I'm sure there is a simpler shorter way to do this.

    obj = doc.SearchObject("Null")
    poly = doc.SearchObject("Polygon")
    
    Points_List = [" 0, -100, -100, -100 ", " 1, -100, 100, -100 ", " 2, 100, -100, -100 ", " 3, 100, 100, -100 ", " 4, 100, -100, 100 ", " 5, 100, 100, 100 ", " 6, -100, -100, 100 ", " 7, -100, 100, 100 "]
    Targ_List = [" 0, -100, -100, -100 ", " 1, -100, 60.326, -100 ", " 2, 100, -100, -100 ", " 3, 100, 100, -59.691 ", " 4, 100, -100, 100 ", " 5, 100, 165.287, 100 ", " 6, -100, -100, 100 ", " 7, -100, 15.892, 100 "]
    
    cntrl = obj[c4d.ID_USERDATA,1]
    
    N_des_list = []    
    cmp_L_A = []
            
    for i,line in enumerate(Points_List) :
        
        in_L = Points_List[i]
                
        in_line = in_L.split(",")
        
        in_nr = int(in_line[0])
        in_vec_X = float(in_line[1])
        in_vec_Y = float(in_line[2])
        in_vec_Z = float(in_line[3])
                 
        tar_L = Targ_List[i]
                
        tar_line = tar_L.split(",")
        
        tar_nr = int(tar_line[0])
        tar_vec_X = float(tar_line[1])
        tar_vec_Y = float(tar_line[2])
        tar_vec_Z = float(tar_line[3])
               
        if in_vec_X == tar_vec_X:            
           N_x = 0          
        else:
           N_x = tar_vec_X     
        
        if in_vec_Y == tar_vec_Y:
           N_y = 0
        else:
           N_y = tar_vec_Y     
        
        if in_vec_Z == tar_vec_Z:
           N_z = 0
        else:
           N_z = tar_vec_Z
                 
        N_des_list.append(c4d.Vector(N_x,N_y,N_z))
   
    for line in Points_List:
        
        coord = line.split(",")
           
        nr = int(coord[0])
        Vec_X = float(coord[1])
        Vec_Y = float(coord[2])
        Vec_Z = float(coord[3])
        
        cmp_L_A.append(c4d.Vector(Vec_X,Vec_Y,Vec_Z))
    
    for i in range(len(cmp_L_A)) :
        
        morph = cntrl*N_des_list[i] + cmp_L_A[i]   
        poly.SetPoint(i,morph)
       
        poly.Message(c4d.MSG_UPDATE)

On 18/12/2014 at 03:01, xxxxxxxx wrote:

Hello,

the way Shawn show it, is a good way to go.
A few tips
For an enumeration you don´t need an index in your List.
If you use a vector you can access the coordinates with e.g vec = c4d.Vector(3,0,0) vec.x=3.
in xrange is faster.
You might use your slider control directly in the xrange iteration, therefore you don´t need to iterate twice and the list number 3 is not necessary.
But to get started:

  
import c4d  
  
  
def main() :  
    
  List_1=[c4d.Vector(0,1,0),c4d.Vector(5,2,0),c4d.Vector(3,0,3)]  
  List_2=[c4d.Vector(1,1,0),c4d.Vector(5,2,0),c4d.Vector(0,3,0)]  
  List_3=[]  
  for i in xrange(len(List_2)) :  
        
      if List_2[i].x == List_1[i].x:  
          List_2[i].x=0    
      if List_2[i].y == List_1[i].y:  
          List_2[i].y=0    
      if List_2[i].z == List_1[i].z:   
          List_2[i].z=0     
        
      List_3.append(List_2[i])      
            
  print List_3          
    
if __name__=='__main__':  
  main()  
  

Best wishes
Martin

EDIT:

If you do not write the list by your own and it is the type of list you show, than this is a way to access the items e.g.:

  
  Points_List = [" 0, -100, -200, -100 ", " 1, -100, 100, -100 ", " 2, 100, -100, -100 "]  
  #first member third item  
  print Points_List[0].split(",")[2]  

On 18/12/2014 at 03:31, xxxxxxxx wrote:

Thanks Martin for all your help. Slowly but I'm getting there👍