Here's a script that iterates over each mesh island and assigns its vertices into a new vertex group. [![enter image description here][1]][1] It's based on a recursive function since the blender API currently doesn't provide (as far as I know) any built in way to get all mesh islands. import bpy, bmesh def find_island_and_assign_vgroup( o, remaining ): ''' Recursive function that itertaes over mesh islands and assigns a new vertex group to each''' if len( remaining ) > 0: # Create bmesh object (must do this every time since vertex groups are created in object mode, which destroys the bm object bpy.ops.object.mode_set( mode = 'EDIT' ) bm = bmesh.from_edit_mesh( o.data ) bm.verts.ensure_lookup_table() bpy.ops.mesh.select_all( action = 'DESELECT' ) bm.verts[ list(remaining)[0] ].select = True bm.select_flush( True ) bpy.ops.mesh.select_linked() selected_verts = [ v.index for v in bm.verts if v.select ] # Add to a new vertex group bpy.ops.object.mode_set( mode = 'OBJECT' ) vg = o.vertex_groups.new() vg.add( selected_verts, 1.0, 'ADD' ) # Remove this island's verts from the vert list now_remaining = remaining - set( selected_verts ) bm.free() find_island_and_assign_vgroup( o, now_remaining ) o = bpy.data.objects[ bpy.context.object.name ] all_verts = set( range( len( o.data.vertices ) ) ) find_island_and_assign_vgroup( o, all_verts ) [1]: https://i.sstatic.net/LyOdS.gif