2012-08-13 62 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