【问题标题】:Python, check element X from substringsPython,从子字符串中检查元素 X
【发布时间】:2020-01-22 07:10:04
【问题描述】:

我正在尝试检查每个子列表中位置 X 的元素是否相同。喜欢:

我们有列表列表:

s= [[0,0,0],[0,0,1],[0,0,1]]

我想检查所有子列表中的第三个元素是否相同。就像在这个例子中应该只适用于第二个和第三个子列表

for x in s:
    if x[2] == 1:
        print "T"

尝试打印它们,但这只是每次进入时都会打印它们。我只想检查列表中的第三个元素在 subslist 中是否相同

谢谢!

【问题讨论】:

  • 不清楚您所说的“子字符串”是什么意思。你是说子列表吗?
  • 您可以使用zip 收集某个位置的所有元素,例如list(zip(*s))[2]
  • 是的,我的意思是子列表,我的错...
  • 不是硬编码您要检查的值,而是从第一个条目中获取相应的值。或者,从所有条目中获取第三个值(使用映射或列表理解),然后使用 reduce 之类的东西来检查它们是否都相等。或者一个集合:如果你将一个序列提供给一个集合并最终得到一个元素,那么所有项目都是平等的,所以len({entry[2] for entry in s}) == 1
  • 您使用的是 Python 2 吗?如果有,为什么?

标签: python find substring


【解决方案1】:

您可以使用all

s= [[0,0,1],[0,0,1],[0,0,1]]
if all(map(lambda x:x[-1],s)):
    print('T')
else:
    print('N') 

或者你可以zip

x= zip(*s) 

if len(set(x[-1]))==1:
    print('T') 
else:
    print ('N')

【讨论】:

    【解决方案2】:

    你可以试试这个:

    decision = 'T'
    s= [[0,0,0],[0,0,1],[0,0,1]]
    
    for x in s:
        if x[2] != 1:
            decision = "F"
            break
    print(decision)
    

    输出:

    F
    

    或者:

    if all(x[2] == 1 for x in s):
        print('T')
    else:
        print('F')
    

    如果您事先不知道3rd 元素:

    if len({x[2] for x in s}) == 1:
        print('T')
    else:
        print('F')
    

    【讨论】:

      【解决方案3】:

      你的方法不对,
      至于我对这个问题的理解,您需要检查列表中的第三个元素是否与列表中的所有元素相同,使用这样的函数返回 True 是相同的元素,否则返回 False。

      def is_same(s) :
          temp = s[0][2]  # temporarily save the 3rd element in a variable
          for x in s :    # loop through all the elements
              if x[2] != temp :  # check for the miss match
                  return False
          return True
      
      s = [[0,0,1], [0, 1, 1], [0,1,1]]
      
      print(is_same(s))
      

      【讨论】:

        【解决方案4】:
        s= [[0,0,0],[0,0,1],[0,1,1]]
        pos=2
        for i in range(len(s)):
            for j in range(len(s)):
                if i<j:
                    if s[i][2]==s[j][2]:
                        print (s[i],s[j])
        

        在这段代码中比较所有的转租,如果最后一个 pos 中的数字相同,则打印 2 个列表。

        输出:

        [0, 0, 1] [0, 1, 1]

        【讨论】:

        • 问题是检查所有第三项是否相同,而不是打印它们。
        猜你喜欢
        • 1970-01-01
        • 2020-04-05
        • 2014-09-24
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        • 2011-12-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多