I made a small script which checks a list for certain characters. And I’d like to output them seperately.
Input is a list of names which starts with 31. … example
31.01
31.A01
31.15
31.16
31.H05
_Output is _ IF filterz is applicable: 1, the [3]th character (A.H, K or S) 2. the 4th and 5th (01, 05) ELSE 1. the 3th and 4th character (01, 15,16)
OUT=[]
filterz = ['31.A', '31.H', '31.K','31.S']
for i in IN[0]:
if any(n in i for n in filterz):
OUT.append(i[3])
OUT.append(i[4:6])
else:
OUT.append(i[3:5])
Now I get one big list, which isn’t helpful.
I’d like the list
OUT1: ["", A,"","",H]
OUT2: [01,01,15,16,05]
OR even better sublists?
OR am I better off creating two scripts and combine those afterwards?
From python you will get one output. The easiest way to solve your problem is to organize your filter in lists and Output them as a list.
With this method you will have a list with three lists as an output. Then you just need to add another code block node that takes each list, like this:
lst[0];
lst[1];
lst[2];
(If you have 3 main filters).
If this works, and if you know you’ll need this process very often, you can also create a simple custom node with all the outputs needed.
Tell me if I’ve been clear!
test1=[]
test2=[]
OUT=[test1, test2]
filterz = ['31.A', '31.H', '31.K','31.S']
for i in IN[0]:
if any(n in i for n in filterz):
test1.append(i[3])
test2.append(i[4:6])
else:
test1.append("")
test2.append(i[3:5])
if you want several output it could look like this.
OUT = groups, keys
this will give a list with two sublists
OUT[0] -> groups
OUT[1] -> keys
in your case…
test1, test2 = [], []
filterz = ['31.A', '31.H', '31.K','31.S']
for i in IN[0]:
if any(n in i for n in filterz):
test1.append(i[3])
test2.append(i[4:6])
else:
test1.append('')
test2.append(i[3:5])
OUT= test1, test2
It’s very easy actually, but I didn’t understand your syntax. Try to use a cleaner code, your indentation was incorrect. Hope is clearer now, if not, give us your input list and I’ll write a filter for you, but try by yourself first!
The codeblock “lst[0]” is nifty (I was using the chop, and flatten nodes, lolz).
@andrea.nicosiavinci
you did good! Explaining an issue is often harder than the actual solution, sorry for that.
input list is anything starting with “31.”.
And I have to make sure only
31.xx (x= [0-9])
31.yxx (y= [A,H,K,S]), (x=[0-9])
are used.
and therefore ideally 31.biscuits is ignored [to do list ] .
P.CODE
list1, list2=[], []
filterz = ['31.A', '31.H', '31.K','31.S']
for i in IN[0]:
if any(n in i for n in filterz):
list1.append(i[3])
list2.append(i[4:6])
else:
list1.append('')
list2.append(i[3:5])
OUT=list1, list2
Yes, in this case is far better! I assumed @3Pinter was trying to learn python, we already have lot of packages for filtering. Great node, by the way, Clockwork is always very smooth!