2014-11-25 184 views
0

我是python新手。我試圖創建一個函數,它將字符串和列表作爲參數,併爲字符串中找到的每個列表元素(這應該作爲元組返回)返回一個布爾值。我曾嘗試下面的代碼列表元組返回python

def my_check(str1, list1): 
    words = str1.split() 
    x = 1 
    for l in range(len(list1)): 
     for i in range(len(words)): 
      if list1[l] == words[i]: 
       x = x+1 
     if (x > 1): 
      print(True) 
      x = 1 
     else: 
      print(False) 

output = my_check('my name is ide3', ['is', 'my', 'no']) 
print(output) 

此代碼輸出

True 
True 
False 

我怎樣才能返回這個值作爲一個元組

>>> output 
(True, True, False) 

任何想法表示讚賞。

回答

0

發電機救援(編輯:得到了它向後第一次)

def my_check(str1, list1): 
    return tuple(w in str1.split() for w in list1) 
1

如果要修改,打印的東西到返回的東西代碼的任何代碼,您必須:

  1. 在頂部創建一個空集合。
  2. 將每個print調用替換爲將值添加到集合的調用。
  3. 返回集合。

所以:

def my_check(str1, list1): 
    result =() # create an empty collection 
    words = str1.split() 
    x = 1 
    for l in range(len(list1)): 
     for i in range(len(words)): 
      if list1[l] == words[i]: 
       x = x+1 
     if (x > 1): 
      result += (True,) # add the value instead of printing 
      x = 1 
     else: 
      result += (False,) # add the value instead of printing 
    return result # return the collection 

這是一個有點尷尬與元組,但它的作品。你可能會想要考慮使用一個列表,因爲這樣做不那麼尷尬(如果你真的需要轉換它,最後總是可以使用return tuple(result))。

0

考慮到效率,也許我們應該建立從str1.split一組()首先是因爲在一組查詢項比快得多列表中,這樣的:

def my_check(str1, list1): 
    #build a set from the list str1.split() first 
    wordsSet=set(str1.split()) 
    #build a tuple from the boolean generator 
    return tuple((word in wordsSet) for word in list1) 
0

您可以檢查直接在字符串中的字符串,所以split()不是必需的。因此,這也工作:

def my_check(str1, list1): 
    return tuple(w in mystr for w in mylist) 
    # return [w in mystr for w in mylist] # Much faster than creating tuples 

然而,由於返回而不是一個新的列表是不是經常需要一個元組,你應該能夠只使用直列表理解上述(您總是可以在列表轉換爲如果你不得不在你的代碼中下游)。

蟒蛇結果:

In [117]: %timeit my_check_wtuple('my name is ide3', ['is', 'my', 'no']) 
100000 loops, best of 3: 2.31 µs per loop 

In [119]: %timeit my_check_wlist('my name is ide3', ['is', 'my', 'no']) 
1000000 loops, best of 3: 614 ns per loop