![](/img/trans.png)
[英]Given a list of strings, return characters that appear in more than one string
[英]Python 3 - Find strings that appear in more than one list, the list are populated from function arguments
我有一個可以接受任意數量參數的函數:
def lists(*args):
當我執行此功能時,它將使用如下參數執行:
lists(['g', 'gh', 'ghj', 'g'], ['j', 'ju', 'gh', 'gk', 'gn'])
這些參數構成一個多維數組(至少我認為是這樣)。 所以如果我
print(args)
我得到以下內容:
(['g', 'gh', 'ghj', 'g'], ['j', 'ju', 'gh', 'gk', 'gn'])
這是我所期望的。
我要解決的問題是從上述列表中打印出出現在多個列表中的字符串。
在上面的示例中,我可以將列表轉換為一個平面列表並打印出一半的重復項,它將打印出
'g', 'gh'
因為它們都出現不止一次,但是我真正想要打印的只是
'gh'
因為它是出現在多個列表中的唯一列表。
我是要完全以錯誤的方式來做這件事,還是只是不知道如何實現這一點。
我在網上看過,找到了一些如何實現類似效果的示例,但是它們都是使用整數而不是字符串。 我不確定我是否正確設置了陣列/列表,這意味着我執行的任何篩選都會失敗。
感謝您的時間!
這個怎么樣:
def lists(*args):
if len(args)>=2:
res = set(args[0])
else:
return set()
for sub in args[1:]:
res = res.intersection(sub)
return res
測試:
print(lists(['g', 'gh', 'ghj', 'g'], ['j', 'ju', 'gh', 'gk', 'gn'])) # -> {'gh'}
print(lists()) # -> set()
print(lists(['g', 'gh', 'ghj', 'g'])) # -> {'gh'}
print(lists(['g', 'gh', 'gn', 'g'], ['ju', 'gh', 'gk', 'gn'], ['gn', 'gh'])) # -> {'gh', 'gn'}
請注意,以上代碼適用於傳遞給函數的任意數量的list
。
您的代碼的問題是扁平化。 通過拼合,您丟失了有關重復項是在所有list
還是在一個list
多次的信息。
我的代碼正在做的是(在檢查了至少兩個list
傳遞之后)將每個list
轉換為一個set
並計算所有的交集(公共元素)。 相交的計算是成對完成的(第一個rr set
為2nb,前一個相交的結果為3rd,依此類推)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.