Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Làm phẳng list of tuples thành chuỗi trong Python

Khi cần chuyển đổi list of tuples thành chuỗi (string) phẳng, có thể dùng str() kết hợp strip() hoặc các phương pháp join.

str(list) chuyển list thành chuỗi biểu diễn Python (có ngoặc vuông, dấu phẩy).

strip('[]') bỏ ngoặc vuông đầu cuối.

Ví dụ cơ bản

my_list = [(11, 14), (54, 56), (98, 0), (13, 76)]
print(f"List gốc: {my_list}")

# Cách 1: str() + strip()
result = str(my_list).strip('[]')
print(f"\nCách 1 - str().strip('[]'):")
print(result)
print(f"Kiểu: {type(result)}")

Kết quả

List gốc: [(11, 14), (54, 56), (98, 0), (13, 76)]

Cách 1 - str().strip('[]'):
(11, 14), (54, 56), (98, 0), (13, 76)
Kiểu: <class 'str'>

Giải thích

  • str(my_list) tạo chuỗi "[(11, 14), (54, 56), (98, 0), (13, 76)]".
  • .strip('[]') xóa ký tự [ và ] ở đầu và cuối chuỗi.
  • Kết quả là chuỗi biểu diễn các tuple cách nhau bởi dấu phẩy.

Cách tốt hơn: Dùng join() để kiểm soát format

# Cách 2: join với str(tuple) - giữ format tuple
result2 = ', '.join(str(t) for t in my_list)
print(f"Cách 2 - join: {result2}")

# Cách 3: Làm phẳng hoàn toàn (chỉ số, không dấu ngoặc tuple)
flat_nums = ', '.join(str(num) for tup in my_list for num in tup)
print(f"Cách 3 - flatten numbers: {flat_nums}")

# Cách 4: Format tùy chỉnh
result4 = '; '.join(f'({a},{b})' for a, b in my_list)
print(f"Cách 4 - custom format: {result4}")

Kết quả so sánh

Cách 2 - join: (11, 14), (54, 56), (98, 0), (13, 76)
Cách 3 - flatten numbers: 11, 14, 54, 56, 98, 0, 13, 76
Cách 4 - custom format: (11,14); (54,56); (98,0); (13,76)

Chuyển ngược: String -> List of tuples

import ast

# Từ chuỗi format Python
s = "(11, 14), (54, 56), (98, 0), (13, 76)"
# Cần bọc trong [] để parse thành list
parsed = ast.literal_eval(f'[{s}]')
print(parsed)  # [(11, 14), (54, 56), (98, 0), (13, 76)]

# Từ chuỗi số phẳng
flat = "11, 14, 54, 56, 98, 0, 13, 76"
nums = [int(x.strip()) for x in flat.split(',')]
# Gom thành tuple cặp
tuples = list(zip(nums[::2], nums[1::2]))
print(tuples)  # [(11, 14), (54, 56), (98, 0), (13, 76)]

Lưu ý về strip()

# strip('[]') xóa TẤT CẢ ký tự '[' và ']' ở ĐẦU và CUỐI chuỗi
print('[][hello][]'.strip('[]'))  # 'hello' - xóa hết [] ở 2 đầu

# Nếu tuple chứa chuỗi có dấu [], strip có thể xóa nhầm
tricky = [('[a]',), ('b',)]
print(str(tricky).strip('[]'))  # "('[a]',), ('b',)" - OK vì [] không ở đầu/cuối chuỗi toàn bộ
# Nhưng nếu list = [('[', ']')] -> str = "[('[', ']')]" -> strip -> "('[', ']')" - mất ngoặc!