【问题标题】:Convert list of strings to list of integers?将字符串列表转换为整数列表?
【发布时间】:2015-11-26 00:06:45
【问题描述】:

我有一个要转换为简单整数数组的字符串列表。

例子:

my_list = ['This is a string', 'This is a string', 'Hi! I am a string', 'I dislike strings', 'This is a string', 'Not a number']

转换为:

[0, 0, 1, 2, 0, 3]

my_list 中具有相同值的元素在转换后的数组中都将以相同的整数结束。

这背后的想法是我想利用以下语法(来自matplotlib)来制作散点图,当y_traini是一个字符串时,它似乎不喜欢它:

X_train_small_pca[y_train == i, 0]

如上所述,如何将我的列表转换为整数?

【问题讨论】:

  • 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在发布者已经尝试自己解决问题时才提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出以及您实际获得的输出(控制台输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask
  • [int(x[1:]) - 1 for x in my_list] 就是这样。
  • @vaultah,我的例子很糟糕。我已经更新了我的示例。

标签: python


【解决方案1】:

应该这样做:

>>> my_list = ['This is a string', 'This is a string', 'Hi! I am a string', 'I 
>>> dislike strings', 'This is a string', 'Not a number']
>>> mappedDict = dict(zip(set(my_list), xrange(len(my_list))))
>>> output = map(lambda x: mappedDict[x], my_list)
>>> output
[0, 0, 1, 2, 0, 3]

解释:您首先删除列表中的重复项并将它们与单个 id(在本例中为int)映射到一个字典中。之后就像将列表中的每个值转换为映射的 id 一样简单。

【讨论】:

  • 哦,他就是从那里得到这些数字的。原始字符串列表中第一次出现的索引。 +1
【解决方案2】:

您的问题:将字符串列表转换为整数列表,其中相同的字符串应该成为相同的整数(无论这些整数是什么)

列表的index("value") 方法返回找到“值”的第一个索引。对于列表中所有相同的字符串“value”,此方法将返回相同的整数。

>>> my_list = ['This is a string', 'This is a string', 'Hi! I am a string', 'I dislike strings', 'This is a string', 'Not a number']

>>> my_list.index('This is a string')
0

>>> indexes=[my_list.index(l) for l in my_list]
>>> print(indexes)
[0, 0, 2, 3, 0, 5]

【讨论】:

    【解决方案3】:
    my_list = ['This is a string', 'This is a string', 'Hi! I am a string', 'I dislike strings', 'This is a string', 'Not a number']
    
    converter = {}
    i = 1
    
    for item in my_list:
        if item not in converter:
            converter[item] = i
            i += 1
    
    int_list = [converter[i] for i in my_list]
    

    【讨论】:

    • 有什么理由使用converter.get 而不是if item not in converter 吗?第二个似乎更容易理解。
    • 不,一点也不。我同意您的更改使其更易于理解。修改代码
    【解决方案4】:

    您想通过将函数应用于另一个列表的所有成员来创建一个列表。 这是一个列表推导。

    l1 = ['1', '2', '3', '4', '5', '6']
    l2 = [int(x) for x in l1]
    print l2
    

    [1, 2, 3, 4, 5, 6]

    当然,你有一些完全不同的功能,我不知道你是如何从这些字符串中得到这些数字的,但我认为这无关紧要。列表理解将使用您想要的任何功能。

    l1 = ['string', 'this', 'is']
    def f(s):
        return len(s)
    l2 = [f(x) for x in l1]
    print l2
    

    [6,4,2]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      • 2021-06-18
      • 2015-06-19
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多