List = [('j100', 'Jacob'), ('k150', 'Kevin'), ('d120', 'Davis'), ('d120', 'Davies'), ('c642', 'Charles'), ('s315', 'Stephen')]
我有這個元組串列,我想創建一個嵌套回圈來比較元組的第一個元素,看看它們是否相同。所以我想將 j100 與 k150 進行比較,以查看所有元素是否相同等。
然后,如果它們相同,我想創建一行輸出,因此 d120=d120 我希望輸出為“戴維斯和戴維斯的名字聽起來相似”。Davies 和 davis 必須按字母順序排列。
我將如何構建這樣的東西?
uj5u.com熱心網友回復:
您可以使用串列推導簡明扼要地做到這一點:
lst = [('j100', 'Jacob'), ('k150', 'Kevin'), ('d120', 'Davis'), ('d120', 'Davies'), ('c642', 'Charles'), ('s315', 'Stephen')]
[print(f'{i[1]} and {l[1]} have similar sounding names') for i in lst for j in lst if i[1] != j[1] and i[0] == j[0]]
輸出:
Davis and Davies have similar sounding names
Davies and Davis have similar sounding names
這適用于每種組合。如果您不希望它們像這樣,您可以將其分解為更易讀的回圈并考慮雙打:
lst = [('j100', 'Jacob'), ('k150', 'Kevin'), ('d120', 'Davis'), ('d120', 'Davies'), ('c642', 'Charles'), ('s315', 'Stephen')]
seen = []
for i in lst:
for j in lst:
if i[1] != j[1] and i[0] == j[0]:
setij = {i[1], j[1]}
if setij not in seen:
seen.append(setij)
print(f'{i[1]} and {j[1]} have similar sounding names')
輸出:
Davis and Davies have similar sounding names
uj5u.com熱心網友回復:
您可以使用 adict將具有相同標簽的名稱組合在一起:
List = [('j100', 'Jacob'), ('k150', 'Kevin'), ('d120', 'Davis'), ('d120', 'Davies'), ('c642', 'Charles'), ('s315', 'Stephen')]
sim = {}
for item in List:
key,name = item
if key in sim:
sim[key].append(name)
else:
sim[key]=[name]
for _,names in sim.items():
if len(names) > 1:
names.sort()
print(f'{" and ".join(names)} have similar sounding names.')
輸出
Davies and Davis have similar sounding names.
uj5u.com熱心網友回復:
你可以試試這樣的
List = [('j100', 'Jacob'), ('k150', 'Kevin'), ('d120', 'Davis'), ('d120', 'Davies'), ('c642', 'Charles'), ('s315', 'Stephen')]
for a in range(len(List)-1):
a_item = List[a]
for b in range(a 1,len(List)):
b_item = List[b]
if a_item[0] == b_item[0]:
result = [a_item[1],b_item[1]]
result.sort()
print(f'{result[0]} and {result[1]} have similar sounding names.')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/439257.html
上一篇:Python:回圈后輸出錯誤
