在本教程中,我们将编写一个程序,该程序将列表中的相似子字符串分组。让我们看一个例子来更清楚地理解它。
strings = ['tutorials-python', 'tutorials-c', 'tutorials-java', 'tutorials-javascript', 'python-1', 'python-2', 'javascript-1']
输出结果
[['tutorials-python', 'tutorials-c', 'tutorials-java', 'tutorials-javascript'], ['python-1', 'python-2'], ['javascript-1']]
我们将使用itertools模块中的groupby方法来解决该问题。该GROUPBY方法组中的所有类似的字符串转换为ITER对象。对于给定的列表,我们用-分割了字符串,并将字符串的第一部分传递给groupby方法。
让我们看看解决这个问题所涉及的步骤。
初始化字符串列表。
导入itertools模块。
初始化一个空列表。
现在,将字符串和一个lambda函数传递给itertools.groupby方法。
lambda函数在使用-拆分后应返回字符串的第一部分
该GROUPBY方法将返回元素及其集团的元组的列表。
在每次迭代中,将一组相似的元素转换为一个列表。
将列表追加到空列表。
打印结果。
# importing the itertools module import itertools # initializing the strings strings = ['tutorials-python', 'tutorials-c', 'tutorials-java', 'tutorials-javascript', 'python-1', 'python-2', 'javascript-1'] # empty list result = [] # iterator # lambda function will return first part from the string iterator = itertools.groupby(strings, lambda string: string.split('-')[0]) # iterating over the result # element and its group for element, group in iterator: # appending the group by converting it into a list result.append(list(group)) # printing the result print(result)
输出结果
如果运行上面的代码,则将得到以下结果。
[['tutorials-python', 'tutorials-c', 'tutorials-java', 'tutorials-javascript'], ython-1', 'python-2'], ['javascript-1']]
如果您对本教程有任何疑问,请在评论部分中提及。
问题内容: 本质上,我想从文件中吸收一行文本,将字符分配给列表,并创建列表中所有单独字符的列表-列表列表。 此刻,我已经尝试过了: 这就是我所拥有的。我不太了解如何提取单个字符并将其分配给新列表。 我从文件中得到的行将类似于: 我想把它变成这个列表,每个单独的字符: 问题答案: 字符串是可迭代的(就像列表一样)。 我的意思是您确实想要这样的东西: 要么 要么 字符将包含文件中的所有字符。
问题内容: 我似乎无法找到的代码等效,像功能,这在任何地方为Python: 基本上,我想检查一个字符串是否包含列表中的子字符串。 问题答案: 试试这个测试: 如果中包含任何子字符串,它将返回。 请注意,链接的问题中有的答案的Python类似物: 在Python 3中,您可以直接使用: 虽然上面使用生成器表达式的版本可能更清楚。
问题内容: 背景: 示例列表: 我想检索一个子串是否匹配的元素,例如 码: 如果列表中的任何元素包含模式,则上面的命令会打印出来。 我想打印与子字符串匹配的元素。因此,如果我要检查,我只想从列表中打印。 问题答案: print [s for s in list if sub in s] 如果要用换行符分隔它们: 完整示例,不区分大小写:
问题内容: 我希望我的Python函数拆分一个句子(输入)并将每个单词存储在列表中。我当前的代码拆分了句子,但没有将单词存储为列表。我怎么做? 问题答案: 这应该足以将每个单词存储在列表中。 words已经是句子中单词的列表,因此不需要循环。 其次,这可能是拼写错误,但是你的循环有些混乱。如果你确实确实想使用附加,它将是: 不
问题内容: 我有一个清单 我正在尝试删除其超字符串已经在列表中的字符串。在这种情况下,结果应为: 我已经写了代码: 但它似乎不起作用。我读过,我们无法在列表上进行迭代时将其删除。因此,副本,而这是我的原始列表。 问题答案: l=[‘abc’,’abcdef’,’def’,’defdef’,’polopolo’] print [j for i, j in enumerate(l) if all(j
问题内容: 我正在尝试采用一个字符串,并将其附加到列表中包含的每个字符串中,然后使用完成的字符串创建一个新列表。例: 我尝试了循环,并尝试了列表理解,但这是垃圾。一如既往的任何帮助,不胜感激。 问题答案: 最简单的方法是使用列表理解: 请注意,我避免使用内置名称,因为那样会掩盖或隐藏内置名称,这非常不好。 另外,如果您实际上不需要列表,而只需要一个迭代器,则生成器表达式可能会更高效(尽管在短列表中