2012-08-13 89 views
0
  1. 具有以下代碼行,它從文件中讀取字對,將它們拆分並返回一個元組,其中每個元素的第一個索引元組是第一個或第二個單詞。 例如,Bob, Smith將分別轉換爲[(Bob, Smith)][(Smith, Bob)]。我將它映射到g.readlines()中的每一對。帶有多個參數並迭代不帶「for」的「映射」

    想知道是否完全可以通過參數flip = True,變成一個更通用的word_flip()函數,它可以與map一起使用嗎?

    first_word_is_first = map(first_second_split, g.readlines()) 
    
    first_word_is_second = map(second_first_split, g.readlines()) 
    
  2. 對於一個功能更強大的方式隨機的問題,如果我給出一個字符串,我想根據每個字(即Alex Smith AGE 35 420)的屬性來劃分該字符串是有一個功能更強大的方式除了重複通過string.split()並將行劃分爲str變量,name,ageroom_number或使用正則表達式,還可以解決這個問題?是否可以使用map,filter或itertools?最好通過一次字符串。

+0

這對Python來說不​​是很習慣(對於大的輸入文件可能不會很好)。你是否從另一種語言移植? – 2012-08-13 09:08:08

+2

請不要一次提出兩個問題。一次創建兩個問題是可以的。如果您提供了輸入和預期輸出的明確示例,您的第一個問題將會大大改善。 – 2012-08-13 09:10:35

+0

其中之一,我對你的第一個問題的回答可能是現貨,但我的第二個答案不足以滿足你的需求。另一個答案可能會爲你的第二個問題提供最好的解決方案,但是完全沒有答案。哪一個會是你接受的最佳答案呢?你如何期待人們投票? – 2012-08-13 09:14:58

回答

1
  1. 是的,你可以使用一個functools.partialmap()使用時要額外的參數添加到您的功能。

    from functools import partial 
    first_word_is_first = map(partial(word_flip, flip=False), g.readlines()) 
    first_word_is_second = map(partial(word_flip, flip=True), g.readlines()) 
    

    這將是更容易使用,雖然列表理解:

    first_word_is_first = [word_flip(l, flip=False) for l in g.readlines()] 
    first_word_is_second = [word_flip(l, flip=True) for l in g.readlines()] 
    
  2. 您的字符串的結構(空間這兩個領域之間和內部的字段),你將不得不使用的方法像正則表達式或專用函數的方法來分割字段。

0

2:從方法調用

name, surname, n, age, room = 'Alex Smith AGE 35 420'.split() 

返回多個結果。

+1

呃,當我對兩個問題發表評論時沒有看到您的答案......感謝您證明這一點! :-P – 2012-08-13 09:18:02

+0

我不知道我的答案證明了什麼。這是非常愚蠢的:P – fiatjaf 2012-10-19 00:00:20

+0

請參閱[我對OP的評論](http://stackoverflow.com/questions/11931140/python-map-with-more-than-one-parameter-and-iterating-without-for/ 11931236#comment15890673_11931140)要求他堅持每個帖子一個問題。 – 2012-10-19 05:57:38