Mathematica How Do You Count Opposite Sign Pairs in Mathematica?

  • Thread starter Thread starter ascky
  • Start date Start date
  • Tags Tags
    Mathematica
AI Thread Summary
To count the number of neighbor pairs of opposite signs in a list of 1's and -1's using Mathematica, the ReplaceList function can be utilized effectively. By applying a pattern that identifies sign flips, the positions of these flips can be determined. Wrapping the result with Length[] provides the total count of sign changes. The discussion highlights the unintuitive nature of Mathematica's syntax for this task, emphasizing the challenge in finding straightforward solutions. This method is a useful workaround for counting opposite sign pairs in lists.
ascky
Messages
50
Reaction score
0
So I want to be able to count the number of neighbour pairs of opposite sign in a list of 1's and -1's (eg. 1 for {1,1,1,-1,-1} and 3 for {1,-1,1,-1,-1}), but I can't work out the pattern matching syntax in Mathematica even after reading the documentation. I was thinking to use the Count function. Anybody able to help, please?
 
Physics news on Phys.org
Like so many things in Mathematica, I don't know how you would ever stumble onto this on your own.

This will tell you the positions where the sign flip happens.

In[1]:= ReplaceList[{1,1,1,-1,-1}, {pre___, 1,-1,___}|{pre___,-1,1,___} :>Length[{pre}]+1]

Out[1]= {3}

In[2]:= ReplaceList[{1,-1,1,-1,-1}, {pre___,1,-1,___}|{pre___,-1,1,___} :>Length[{pre}]+1]

Out[2]= {1,3,2}

This trick courtesy http://mathematica.stackexchange.com/questions/941/finding-a-subsequence-in-a-list among other places

And if you wrap a Length[] around those it will tell you how many sign flips.

In[3]:= Length[ReplaceList[{1,-1,1,-1,-1}, {pre___,1,-1,___}|{pre___,-1,1,___} :>Length[{pre}]+1]]

Out[3]= 3

When would you think that the way to find how many of something you have is to begin by destroying your data?
MatchQ doesn't work, Position doesn't work, Count doesn't work, not as far as I've ever been able to find.
 
Last edited:
How unintuitive! Thanks for that Bill, I wouldn't have figured it out on my own.
 

Similar threads

Replies
6
Views
4K
Replies
3
Views
3K
Replies
22
Views
3K
Replies
4
Views
2K
Replies
2
Views
3K
Replies
2
Views
3K
Replies
2
Views
2K
Replies
2
Views
3K
Back
Top