Skip to content
Flying Animal

Flatten In Dynamo

🕒 Published at:

Mở đầu

Bài viết hôm nay sẽ tổng hợp những gì liên quan đến Flatten.Node được sử dụng rất phổ biến trong Dynamo giúp bạn duỗi danh sách ra để làm việc.

Sử dụng Node

Dùng CodeBlock

Viết Script tùy chỉnh

Ở đây mình sẽ giới thiệu hai phương pháp, một với dựng lại và một với tận dụng thư viện đã có sẵn(DSCoreNodes).

py
# Load the Python Standard and DesignScript Libraries
import sys
import clr
clr.AddReference('DSCoreNodes')
from DSCore.List import Flatten
OUT = Flatten(IN[0])

Hoặc :

py
import collections

def flattenList(unflattened_list):
	if isinstance(unflattened_list,collections.Iterable):
		return [sub_element for element in unflattened_list for sub_element in flattenList(element)]
	else:
		return [unflattened_list]
OUT = flattenList(IN[0])

Hoặc :

py

# The inputs to this node will be stored as a list in the IN variables.
def flatten(x):
    result = []
    try:
    	for el in x:
        	if hasattr(el, "__iter__") and not isinstance(el, basestring):
        	    result.extend(flatten(el))
        	else:
        	    result.append(el)
    except:
    	result = x
    return result
OUT = flatten(IN[0])

Ngoài những cách ở bên trên thì có một cách đơn giản hơn bao giờ hết, bạn có thể viết ngắn gọn đại loại như này.Lưu ý là vấn đề này chỉ dùng danh sách từ hai cấp trở xuống thôi đấy.

py
lst = [[2, 2], [4], [1, 2, 3, 4], [1, 2, 3]]
# ... Flatten the list here ...
lst = [x for l in lst for x in l]
print(lst)
# [2, 2, 4, 1, 2, 3, 4, 1, 2, 3]

Hoặc dùng với itertools

Hoặc dùng tuyệt chiêu cuối

Tổng kết

Các kết quả trên đều cho ra cùng một kết quả giống nhau, như vậy mình sẽ có cái nhìn tổng thể và bao quát hơn thông qua 4 cách viết này.Hi vọng sẽ bổ sung kiến thức cho bạn về vấn đề này.Chúc các bạn có một ngày làm việc vui vẻ.

Tham khảo

mathsppblog