【问题标题】:append only if part of word is not already in list仅当单词的一部分不在列表中时才附加
【发布时间】:2019-11-21 12:52:25
【问题描述】:

我有一个类似下面的列表,想从中列出两个列表。如果第一个包含 S01_a,则 S01_b 应该在第二个列表中。

my_list = ['S01_a', 'S01_b', 'S02_a', 'S02_b', 'S03_a', 'S03_b', 'S04_a', 'S04_b']

我试过这个,但我不知道如何引用 list1 中项目的 [1:2] 字符。有人有解决办法吗?

stims = ["S01_a", "S01_b", "S02_a", "S02_b", "S03_a", "S03_b", "S04_a", "S04_b"]

l1 = []
l2 = []
for item in stims:
    if item[1:2] not in l1:
        l1.append(item)
    else:
        l2.append(item)


print(l1)
print(l2)

输出是:

['S01_a', 'S01_b', 'S02_a', 'S02_b', 'S03_a', 'S03_b', 'S04_a', 'S04_b']
[]

提前谢谢你。

【问题讨论】:

  • 你能添加你的输出吗?
  • 您在寻找l1, l2 = stims[::2], stims[1::2]吗?
  • 仅供参考 [1:2] 与 [1] 相同。您指定从索引 1 开始,最多但不包括 2(即 1)

标签: python list character


【解决方案1】:

您可以将any() 与一个生成器一起使用,该生成器针对列表中的每个元素测试item[1:3]

for item in stims:
    if not any(item[1:3] == el[1:3] for el in l1):
        l1.append(item)
    else:
        l2.append(item)

您需要使用切片[1:3]。请记住,第二个索引不包含在内,因此[1:2] 只选择数字0,而不是两位数字0102 等。

【讨论】:

  • 这仅将“S01_a”附加到第一个列表,然后将其他所有内容附加到第二个列表
  • 应该是[1:3][1:2] 只匹配 0,而不是 01
猜你喜欢
  • 2016-10-19
  • 1970-01-01
  • 2017-03-20
  • 2023-03-19
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
相关资源
最近更新 更多