最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中l(wèi)ist、tuple和set三大容器的相互轉(zhuǎn)換技巧

 更新時(shí)間:2026年05月12日 09:10:27   作者:知遠(yuǎn)漫談  
在Python的世界里,容器(Containers)就像魔法背包,幫我們高效地組織和處理數(shù)據(jù),作為Python開(kāi)發(fā)者,你一定熟悉list、tuple和set這三大基礎(chǔ)容器,本篇博客將深入探討list、tuple和set的相互轉(zhuǎn)換邏輯,需要的朋友可以參考下

引言

在Python的世界里,容器(Containers)就像魔法背包,幫我們高效地組織和處理數(shù)據(jù)。作為Python開(kāi)發(fā)者,你一定熟悉list、tupleset這三大基礎(chǔ)容器。但你是否曾為如何在它們之間靈活轉(zhuǎn)換而困惑?比如,想把一個(gè)可變的列表變成不可變的元組,或者需要快速去除重復(fù)項(xiàng)時(shí)將列表轉(zhuǎn)為集合?掌握它們的相互轉(zhuǎn)換技巧,能讓你的代碼更簡(jiǎn)潔、高效,避免重復(fù)造輪子!

本篇博客將深入探討listtupleset的相互轉(zhuǎn)換邏輯,通過(guò)大量實(shí)戰(zhàn)代碼示例、關(guān)鍵注意事項(xiàng)和可視化圖表,幫你徹底打通容器轉(zhuǎn)換的任督二脈。無(wú)論你是Python新手還是想鞏固基礎(chǔ)的老手,這里都有你需要的干貨!我們會(huì)覆蓋所有6種轉(zhuǎn)換路徑(list→tuple、list→set、tuple→list等),分析性能陷阱,并分享高級(jí)技巧。準(zhǔn)備好了嗎?Let’s dive in!

為什么容器轉(zhuǎn)換如此重要?

在Python中,list、tupleset雖同為容器,但設(shè)計(jì)哲學(xué)截然不同:

  • list:有序、可變、允許重復(fù)項(xiàng)。像一個(gè)靈活的待辦清單,隨時(shí)增刪改。
  • tuple:有序、不可變、允許重復(fù)項(xiàng)。像一份已簽名的合同,內(nèi)容固定不可更改。
  • set:無(wú)序、可變、自動(dòng)去重。像一個(gè)獨(dú)特的郵票收藏冊(cè),重復(fù)項(xiàng)會(huì)被自動(dòng)丟棄。

實(shí)際開(kāi)發(fā)中,我們常需在它們之間切換:

  • 將API返回的list轉(zhuǎn)為tuple以確保數(shù)據(jù)安全(防止意外修改)
  • set快速去重后轉(zhuǎn)回list進(jìn)行排序操作
  • 將數(shù)據(jù)庫(kù)查詢結(jié)果(tuple)轉(zhuǎn)為list以便動(dòng)態(tài)調(diào)整

關(guān)鍵洞察:轉(zhuǎn)換不僅是語(yǔ)法操作,更是數(shù)據(jù)語(yǔ)義的轉(zhuǎn)換。理解每種容器的特性,才能避免"轉(zhuǎn)換后數(shù)據(jù)意外丟失"的坑!

Python官方文檔 Data Structures教程 強(qiáng)調(diào):容器的選擇直接影響代碼的健壯性和性能。下面我們先快速回顧核心特性,再進(jìn)入轉(zhuǎn)換實(shí)戰(zhàn)。

?? 三大容器核心特性對(duì)比

特性listtupleset
可變性? 可變? 不可變? 可變
有序性? 有序? 有序? 無(wú)序
重復(fù)項(xiàng)? 允許? 允許? 自動(dòng)去重
典型用途動(dòng)態(tài)數(shù)據(jù)集固定配置/鍵值唯一性檢查/成員測(cè)試

注意:set的無(wú)序性意味著轉(zhuǎn)換后元素順序無(wú)法保證!這是轉(zhuǎn)換中最易踩的坑。

list → tuple:鎖定數(shù)據(jù)的黃金轉(zhuǎn)換

list轉(zhuǎn)為tuple是最常見(jiàn)的轉(zhuǎn)換之一。當(dāng)你需要確保數(shù)據(jù)在傳遞過(guò)程中不被修改時(shí)(比如作為字典的鍵或函數(shù)參數(shù)),tuple是理想選擇。轉(zhuǎn)換語(yǔ)法極其簡(jiǎn)單:

my_list = [1, 2, 3, "a", "b"]
my_tuple = tuple(my_list)  # 關(guān)鍵:使用tuple()構(gòu)造函數(shù)

print("Original list:", my_list)      # [1, 2, 3, 'a', 'b']
print("Converted tuple:", my_tuple)   # (1, 2, 3, 'a', 'b')
print("Type check:", type(my_tuple))  # <class 'tuple'>

為什么選擇這種轉(zhuǎn)換?

  • 數(shù)據(jù)保護(hù)tuple不可變,防止意外修改。
  • 性能提升tuplelist占用更少內(nèi)存(尤其在大型數(shù)據(jù)集時(shí))。
  • 哈希支持tuple可作為字典鍵,而list不能(試試 {{my_list}: "value"} 會(huì)報(bào)錯(cuò)!)。

關(guān)鍵注意事項(xiàng)

嵌套容器不會(huì)遞歸轉(zhuǎn)換

nested_list = [1, [2, 3], (4, 5)]
nested_tuple = tuple(nested_list)
print(nested_tuple)  # (1, [2, 3], (4, 5)) → 子列表仍是list!

需要手動(dòng)遞歸轉(zhuǎn)換子容器(見(jiàn)后文高級(jí)技巧)。

空容器轉(zhuǎn)換

empty_tuple = tuple([])  # 返回空元組 ()

實(shí)戰(zhàn)場(chǎng)景:API響應(yīng)數(shù)據(jù)固化

假設(shè)你從API獲取用戶ID列表,需作為緩存鍵:

import requests

response = requests.get("https://api.example.com/users")
user_ids = response.json()["ids"]  # 假設(shè)返回 [101, 102, 103]

# 轉(zhuǎn)為tuple作為緩存鍵(list不能作為字典鍵?。?
cache_key = tuple(user_ids)
cache = {cache_key: "user_data"}  # 安全操作 ?

list → set:一鍵去重的魔法

當(dāng)需要快速消除重復(fù)項(xiàng)時(shí),list轉(zhuǎn)set是最高效的解決方案。set的底層哈希實(shí)現(xiàn)使去重操作平均時(shí)間復(fù)雜度為O(n),遠(yuǎn)快于手動(dòng)循環(huán)檢查。

colors = ["red", "blue", "green", "blue", "yellow", "red"]
unique_colors = set(colors)

print("Original list:", colors)       # ['red', 'blue', 'green', 'blue', 'yellow', 'red']
print("Unique set:", unique_colors)   # {'red', 'blue', 'green', 'yellow'} → 重復(fù)項(xiàng)消失!
print("Type check:", type(unique_colors))  # <class 'set'>

轉(zhuǎn)換背后的科學(xué)

  • 自動(dòng)去重set通過(guò)哈希值判斷唯一性,相同值的元素只保留一個(gè)。
  • 順序丟失:輸出順序不保證與原列表一致(Python 3.7+保留插入順序,但官方不推薦依賴此特性)。

性能對(duì)比實(shí)驗(yàn)

測(cè)試10,000個(gè)元素的去重速度:

import timeit

# 生成含重復(fù)項(xiàng)的列表
test_list = list(range(5000)) * 2  # 10,000元素,50%重復(fù)

# 方法1:用set去重
set_time = timeit.timeit('set(test_list)', globals=globals(), number=1000)

# 方法2:手動(dòng)循環(huán)去重
def manual_unique(lst):
    seen = []
    for item in lst:
        if item not in seen:
            seen.append(item)
    return seen

manual_time = timeit.timeit('manual_unique(test_list)', globals=globals(), number=1000)

print(f"Set去重耗時(shí): {set_time:.4f}秒")
print(f"手動(dòng)去重耗時(shí): {manual_time:.4f}秒")
# 典型輸出:Set去重耗時(shí): 0.0215秒 vs 手動(dòng)去重耗時(shí): 4.8123秒 → 快200倍!

常見(jiàn)陷阱:可哈希性要求

set要求所有元素必須是可哈希的(Hashable)。如果列表包含不可哈希對(duì)象(如字典、列表),轉(zhuǎn)換會(huì)失?。?/p>

invalid_list = [1, {"key": "value"}, [2, 3]]
# set(invalid_list) → 報(bào)錯(cuò):TypeError: unhashable type: 'dict'

解決方案

對(duì)于字典:轉(zhuǎn)為frozenset或元組

dict_list = [{"id": 1}, {"id": 2}]
hashable_set = set(tuple(d.items()) for d in dict_list)  # 轉(zhuǎn)為元組集合

對(duì)于列表:先轉(zhuǎn)為元組

nested_list = [[1,2], [3,4]]
tuple_set = set(tuple(sub) for sub in nested_list)

tuple → list:釋放數(shù)據(jù)的靈活性

當(dāng)需要修改一個(gè)原本不可變的tuple時(shí)(比如添加/刪除元素),轉(zhuǎn)為list是唯一途徑。轉(zhuǎn)換同樣簡(jiǎn)單:

coordinates = (10.5, 20.3, 30.1)
coord_list = list(coordinates)  # 使用list()構(gòu)造函數(shù)

print("Original tuple:", coordinates)  # (10.5, 20.3, 30.1)
print("Converted list:", coord_list)   # [10.5, 20.3, 30.1]

# 現(xiàn)在可以安全修改!
coord_list.append(40.7)
print("Modified list:", coord_list)    # [10.5, 20.3, 30.1, 40.7]

為什么需要這種轉(zhuǎn)換?

  • 動(dòng)態(tài)操作list支持append()、insert()pop()等方法。
  • 函數(shù)兼容:某些庫(kù)函數(shù)(如sorted())要求可變序列。
  • 數(shù)據(jù)預(yù)處理:清洗數(shù)據(jù)時(shí)需臨時(shí)修改。

重要警告:引用陷阱!

tuple轉(zhuǎn)list淺拷貝(Shallow Copy)。如果tuple包含可變對(duì)象(如列表),修改子列表會(huì)影響原tuple

nested_tuple = (1, [2, 3], {"a": 4})
nested_list = list(nested_tuple)

nested_list[1].append(99)  # 修改子列表
print(nested_tuple[1])     # [2, 3, 99] → 原tuple的子列表也被修改!

安全方案:使用copy模塊進(jìn)行深拷貝:

import copy
safe_list = copy.deepcopy(nested_tuple)
safe_list[1].append(100)
print(nested_tuple[1])  # [2, 3, 99] → 原數(shù)據(jù)不受影響

實(shí)戰(zhàn)場(chǎng)景:數(shù)據(jù)庫(kù)記錄處理

從數(shù)據(jù)庫(kù)獲取的元組需動(dòng)態(tài)調(diào)整:

# 模擬數(shù)據(jù)庫(kù)查詢結(jié)果(每行是tuple)
db_results = [(1, "Alice"), (2, "Bob"), (3, "Charlie")]

# 轉(zhuǎn)為list以便添加新字段
user_list = [list(row) for row in db_results]
for user in user_list:
    user.append("active")  # 添加狀態(tài)字段

print(user_list)  # [[1, 'Alice', 'active'], ...]

tuple → set:去重與成員測(cè)試加速

tuple轉(zhuǎn)為set主要用于快速去重或高效成員檢查(in操作)。由于tuple本身不可變,轉(zhuǎn)換過(guò)程比list更安全:

status_codes = (200, 404, 200, 500, 403)
unique_codes = set(status_codes)

print("Original tuple:", status_codes)  # (200, 404, 200, 500, 403)
print("Unique set:", unique_codes)     # {200, 404, 500, 403}
print("404 in set?", 404 in unique_codes)  # True → 成員檢查O(1)時(shí)間!

性能優(yōu)勢(shì)詳解

成員檢查setin操作平均O(1)時(shí)間,而tuple需O(n)遍歷。

big_tuple = tuple(range(1000000))
big_set = set(big_tuple)

%timeit 999999 in big_tuple  # ~10ms (線性搜索)
%timeit 999999 in big_set    # ~0.01ms (哈希查找)
  • 去重效率:與list轉(zhuǎn)set相同,但避免了tuple不可變導(dǎo)致的中間拷貝。

實(shí)際應(yīng)用:網(wǎng)絡(luò)請(qǐng)求狀態(tài)分析

快速統(tǒng)計(jì)API響應(yīng)狀態(tài):

response_times = (0.2, 0.5, 0.2, 1.0, 0.3)  # 模擬響應(yīng)時(shí)間元組
unique_times = set(response_times)

print(f"總請(qǐng)求數(shù): {len(response_times)}")
print(f"唯一響應(yīng)時(shí)間: {len(unique_times)}")
print(f"最快響應(yīng): {min(unique_times)}s")  # 0.2

set → list:恢復(fù)順序與索引訪問(wèn)

當(dāng)需要對(duì)唯一元素集合進(jìn)行排序、切片或索引操作時(shí),必須轉(zhuǎn)回list(因?yàn)?code>set無(wú)序且不支持索引)。轉(zhuǎn)換保留唯一性但丟失原始順序:

unique_numbers = {5, 1, 3, 2, 4}
number_list = list(unique_numbers)

print("Original set:", unique_numbers)  # {1, 2, 3, 4, 5} (順序可能不同)
print("Converted list:", number_list)   # [1, 2, 3, 4, 5] → 順序不保證一致!

控制轉(zhuǎn)換后的順序

雖然set本身無(wú)序,但可通過(guò)sorted()恢復(fù)邏輯順序:

# 按數(shù)字升序
sorted_list = sorted(unique_numbers)  # [1, 2, 3, 4, 5]

# 按字符串長(zhǎng)度降序(自定義key)
words = {"apple", "banana", "cherry"}
sorted_words = sorted(words, key=len, reverse=True)  # ['banana', 'cherry', 'apple']

關(guān)鍵陷阱:可變性丟失

set是可變的,但轉(zhuǎn)換后的list也是可變的。修改list不會(huì)影響原set(與tuple不同):

s = {1, 2, 3}
l = list(s)
l.append(4)
print(s)  # {1, 2, 3} → 原set不變

實(shí)戰(zhàn)場(chǎng)景:用戶標(biāo)簽處理

從唯一標(biāo)簽集合生成有序報(bào)告:

user_tags = {"python", "data", "ml", "ai", "web"}
# 轉(zhuǎn)為排序列表生成報(bào)告
report_tags = sorted(user_tags, key=str.lower)  # 按字母排序
print("Top tags:", ", ".join(report_tags))  # "ai, data, ml, python, web"

set → tuple:創(chuàng)建不可變唯一集合

當(dāng)需要不可變且唯一的數(shù)據(jù)結(jié)構(gòu)時(shí)(如字典鍵或函數(shù)參數(shù)),set轉(zhuǎn)tuple是完美方案。它結(jié)合了set的唯一性和tuple的安全性:

unique_emails = {"a@example.com", "b@example.com", "a@example.com"}
email_tuple = tuple(unique_emails)

print("Original set:", unique_emails)  # {'a@example.com', 'b@example.com'}
print("Tuple result:", email_tuple)   # ('a@example.com', 'b@example.com') → 順序不定
print("Type check:", type(email_tuple))  # <class 'tuple'>

為什么優(yōu)于直接用set?

  • 哈希支持tuple可作為字典鍵,而set不能(frozenset可以,但tuple更通用)。
  • 序列操作:支持索引、切片等序列操作(set不支持)。
  • 跨平臺(tái)兼容:某些庫(kù)(如Pandas)對(duì)tuple支持更好。

順序問(wèn)題解決方案

如果需要固定順序,先排序再轉(zhuǎn)tuple

sorted_tuple = tuple(sorted(unique_emails))
print(sorted_tuple)  # ('a@example.com', 'b@example.com') → 確定順序

實(shí)戰(zhàn)場(chǎng)景:緩存鍵生成

創(chuàng)建基于唯一參數(shù)的緩存鍵:

def get_data(params: set):
    # 將參數(shù)集轉(zhuǎn)為有序元組作為緩存鍵
    cache_key = tuple(sorted(params))
    # ... 用cache_key查詢緩存
    return cache_key

print(get_data({"user_id", "token"}))  # ('token', 'user_id') → 順序一致

容器轉(zhuǎn)換全景圖:mermaid可視化

為了清晰展示三大容器的轉(zhuǎn)換關(guān)系,我們用mermaid圖表直觀呈現(xiàn)所有路徑。注意箭頭方向表示轉(zhuǎn)換可行性,虛線表示可能丟失數(shù)據(jù)(如順序或唯一性):

渲染錯(cuò)誤: Mermaid 渲染失敗: Parse error on line 2: ... A[list] -->|tuple()| B[tuple] A - -----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'PS'

圖表解讀

  • 實(shí)線箭頭:標(biāo)準(zhǔn)轉(zhuǎn)換路徑(語(yǔ)法簡(jiǎn)單)。
  • 虛線箭頭:轉(zhuǎn)換可能丟失信息(如set轉(zhuǎn)換時(shí)順序不可控)。
  • 顏色標(biāo)記
    • ?? 藍(lán)色:可變?nèi)萜鳎?code>list)
    • ?? 紅色:不可變?nèi)萜鳎?code>tuple)
    • ?? 綠色:唯一性容器(set

關(guān)鍵結(jié)論

  1. listtuple 轉(zhuǎn)換保留順序和重復(fù)項(xiàng),僅改變可變性。
  2. 涉及set的轉(zhuǎn)換必然丟失順序,且可能減少元素(去重)。
  3. setlist/tuple唯一能恢復(fù)索引訪問(wèn)的路徑。

高級(jí)轉(zhuǎn)換技巧與陷阱規(guī)避

掌握基礎(chǔ)轉(zhuǎn)換后,讓我們挑戰(zhàn)更復(fù)雜的場(chǎng)景。這些技巧能幫你避免生產(chǎn)環(huán)境中的"詭異Bug"!

嵌套容器的深度轉(zhuǎn)換

當(dāng)容器包含子容器(如列表中的字典),淺層轉(zhuǎn)換會(huì)導(dǎo)致內(nèi)部結(jié)構(gòu)不一致:

# 問(wèn)題:混合嵌套結(jié)構(gòu)
mixed_data = [1, (2, [3, 4]), {"a": [5, 6]}]

# 錯(cuò)誤:直接轉(zhuǎn)set會(huì)失?。ú豢晒#?
# set(mixed_data) → TypeError

# 正確方案:遞歸轉(zhuǎn)換函數(shù)
def deep_convert_to_set(obj):
    if isinstance(obj, (list, tuple)):
        return frozenset(deep_convert_to_set(item) for item in obj)
    elif isinstance(obj, dict):
        return frozenset((k, deep_convert_to_set(v)) for k, v in obj.items())
    return obj

result = deep_convert_to_set(mixed_data)
print(result)  # frozenset({1, frozenset({2, frozenset({3, 4})}), ...})

要點(diǎn)

  • 使用frozenset處理嵌套(因set不可哈希)。
  • 遞歸處理字典、列表、元組。

性能優(yōu)化:避免不必要的轉(zhuǎn)換

轉(zhuǎn)換雖方便,但隱含性能成本。牢記這些原則:

避免循環(huán)內(nèi)轉(zhuǎn)換

# 反模式:每次循環(huán)都轉(zhuǎn)set
for item in huge_list:
    if item in set(huge_list):  # 每次新建set!
        ...

# 正確:提前轉(zhuǎn)換
unique_set = set(huge_list)
for item in huge_list:
    if item in unique_set:  # O(1)檢查

大數(shù)據(jù)集慎用sorted(set(...))
set()去重 + sorted()排序 比 dict.fromkeys().keys()慢:

# 更快的有序去重(保留首次出現(xiàn)順序)
ordered_unique = list(dict.fromkeys(huge_list))

錯(cuò)誤處理:優(yōu)雅應(yīng)對(duì)轉(zhuǎn)換失敗

轉(zhuǎn)換可能因數(shù)據(jù)問(wèn)題失?。ㄈ绮豢晒?duì)象)。用try-except提升健壯性:

def safe_tuple_to_list(tup):
    try:
        return list(tup)
    except TypeError as e:
        print(f"轉(zhuǎn)換失敗: {e}")
        # 嘗試修復(fù):遞歸轉(zhuǎn)換子元素
        return [safe_tuple_to_list(item) if isinstance(item, tuple) else item 
                for item in tup]

# 測(cè)試含不可哈希對(duì)象的元組
problematic = (1, {"key": "value"})
print(safe_tuple_to_list(problematic))  # [1, {'key': 'value'}]

實(shí)際案例:日志分析流水線

整合多種轉(zhuǎn)換的完整工作流:

# 1. 從文件讀取日志(每行是tuple)
with open("logs.txt") as f:
    log_tuples = [tuple(line.strip().split()) for line in f]

# 2. 提取唯一IP地址(tuple → set)
unique_ips = {ip for _, ip, _ in log_tuples}

# 3. 轉(zhuǎn)為排序列表生成報(bào)告(set → list)
report_ips = sorted(unique_ips, key=lambda ip: [int(x) for x in ip.split('.')])

# 4. 創(chuàng)建不可變配置(list → tuple)
config = tuple(report_ips[:5])  # 前5個(gè)高頻IP

print("Top IPs:", config)

總結(jié)與最佳實(shí)踐

容器轉(zhuǎn)換是Python基礎(chǔ)中的核心技能,但絕非簡(jiǎn)單的語(yǔ)法操作。通過(guò)本文的深度解析,你應(yīng)該已掌握:

  • 6種轉(zhuǎn)換路徑的語(yǔ)法、特性和陷阱(? list→tuple, list→set, tuple→list, tuple→set, set→list, set→tuple)
  • 性能關(guān)鍵點(diǎn)set去重快200倍,成員檢查O(1) vs O(n)
  • 數(shù)據(jù)語(yǔ)義變化:轉(zhuǎn)換可能丟失順序、重復(fù)項(xiàng)或可變性
  • 高級(jí)技巧:嵌套轉(zhuǎn)換、錯(cuò)誤處理、性能優(yōu)化

黃金法則 checklist

轉(zhuǎn)換場(chǎng)景推薦操作警惕陷阱
需要數(shù)據(jù)安全list → tuple嵌套容器未轉(zhuǎn)換
快速去重/成員檢查list/tuple → set順序丟失
需要索引/排序set → list未顯式排序
創(chuàng)建哈希鍵set → tuple (先排序)順序不一致導(dǎo)致鍵不同
處理嵌套結(jié)構(gòu)遞歸轉(zhuǎn)換 + frozenset淺拷貝導(dǎo)致引用問(wèn)題

終極建議

  1. 先問(wèn)語(yǔ)義:轉(zhuǎn)換是為了去重?鎖定數(shù)據(jù)?還是恢復(fù)順序?
  2. 檢查元素:確保數(shù)據(jù)滿足目標(biāo)容器要求(如可哈希性)。
  3. 測(cè)試邊界:空容器、嵌套結(jié)構(gòu)、大數(shù)據(jù)集。

Python的優(yōu)雅在于用簡(jiǎn)單語(yǔ)法解決復(fù)雜問(wèn)題。當(dāng)你熟練運(yùn)用容器轉(zhuǎn)換時(shí),代碼會(huì)變得更Pythonic——簡(jiǎn)潔、高效、易讀。正如Python之禪所言:“There should be one-- and preferably only one --obvious way to do it.” 

現(xiàn)在,打開(kāi)你的IDE,親手試試這些轉(zhuǎn)換吧!實(shí)踐是掌握Python精髓的唯一途徑。遇到問(wèn)題?歡迎在評(píng)論區(qū)討論。Happy Coding!

以上就是Python中l(wèi)ist、tuple和set三大容器的相互轉(zhuǎn)換技巧的詳細(xì)內(nèi)容,更多關(guān)于Python list、tuple和set容器相互轉(zhuǎn)換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

余干县| 右玉县| 开鲁县| 庆云县| 哈密市| 印江| 图木舒克市| 资源县| 西城区| 十堰市| 忻州市| 保定市| 香港 | 定南县| 忻城县| 思南县| 汕头市| 东兰县| 阳江市| 漳浦县| 河津市| 盐源县| 德安县| 清水河县| 通州区| 新兴县| 昔阳县| 汉阴县| 清镇市| 都昌县| 西安市| 洮南市| 名山县| 扶余县| 乐业县| 怀仁县| 微山县| 高台县| 蚌埠市| 沅陵县| 九龙城区|