簡體   English   中英

Python 3-查找出現在多個列表中的字符串,該列表由函數參數填充

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM